首页 > 编程语言 >[Java]“不同族”基本数据类型间只能“强转”吗?

[Java]“不同族”基本数据类型间只能“强转”吗?

时间:2024-07-12 13:41:52浏览次数:16  
标签:强转 Java int 数据类型 VALUE char 二进制 数值 类型

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://www.cnblogs.com/cnb-yuchen/p/18298193
出自【进步*于辰的博客

本文阐述需要计算不同位二进制的表示范围,引用博文《[MySQL]知识点》中的【数据范围通式】一栏得出的计算公式。虽然Java与MySQL属不同体系,但是数据类型的“约定”是相同的。因此,大家可以此博文作为参考。
参考笔记二,P65.1。

目录

先言

两个结论:

  1. 数据类型转换分为显式转换和隐式转换两种方式,显式转换属于“强转”。具体何种方式取决于转换前后类型所占字节数的大小。
  2. int类型采用有符号二进制存储,char类型采用无符号二进制存储。

1、int → char

引用那篇博文中关于数据类型数值范围的计算通式:
在这里插入图片描述

int类型占4个字节,char类型占2个字节,先计算一下这两种类型的数值范围:

  1. int类型数值范围:-2{8*4-1} ~ 2{8*4-1} - 1 = -2.147483648E9 ~ 2.147483647E9;(有符号二进制)
  2. char类型取值范围:-2{8*2-1} ~ 2{8*2-1} - 1 = -32768 ~ 32767;(有符号二进制)
    注:这个取值范围是按照字节长度计算的。实际上,由于char类型对应ASCLL码,ASCLL码是正数,故不能按照有符号二进制的方式进行计算。
    char类型由16位无符号二进制表示,故char类型数值范围是:0 ~ 2{8*2} - 1 = 0 ~ 65535

字节长度:int > char,故int类型转为char类型属显式转换。但有一个特例

当转为char类型的整型数据是常量,且数值在char类型的数值范围之内时,可隐式转换。

说明示例:
1、将数值在char类型取值--数值范围内的int常量转为char类型。

char c1 = -1;//----------A
char c2 = 65536//;-------B
char c3 = 0;//-----------C
char c4 = 65535;//-------D

char类型的数值范围是: 0 ~ 65535。故A、B编译报错,而C、D转换成功。

2、将int常量转为char类型。

int a1 = 100;
final int a2 = 100;
char c5 = a1;// 编译报错
char c6 = a2;// 转换成功

尽管100在char类型的取值范围内,但a1是变量,故编译报错;而a2以及举例1中的都是常量,故转换成功。

2、float与int

float类型与int类型都占4个字节,且都采用有符号二进制进行存储,

int类型的最大和最小值分别是:

Integer.MAX_VALUE;// 2147483647
Integer.MIN_VALUE;// -2147483648

2147483647等于 231 - 1,-2147483648等于 -231

float类型的最大和最小值分别是:

Float.MAX_VALUE;// 3.4028235E38
Float.MIN_VALUE;// 1.4E-45

这两个值是如何计算出来的?这涉及到浮点数二进制的计算方法,大家可查阅博文《浮点数(小数)在计算机中如何用二进制存储?》。具体如何计算,我暂无头绪。

对于float与int间转换,只能强转,那有没有限制呢?做个测试:

(int) Float.MAX_VALUE;// 2147483647
(int) Float.MIN_VALUE;// 0

可见,无限制。

最后

暂无言。

本文持续更新中。。。

标签:强转,Java,int,数据类型,VALUE,char,二进制,数值,类型
From: https://www.cnblogs.com/cnb-yuchen/p/18298193

相关文章

  • Java性能优化-switch-case和if-else速度性能对比,到底谁快?
    场景Java中使用JMH(JavaMicrobenchmarkHarness微基准测试框架)进行性能测试和优化:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/131723751参考以上性能测试工具的使用。下面针对Java中对switch-case和if-else在速度方面的性能做测试。注:博客:https://blog......
  • java实现浅拷贝与深拷贝
    目录浅拷贝 深拷贝实现cloneable接口序列化浅拷贝浅拷贝是指创建一个新的对象,该对象的内容是原始对象中各项的引用。换句话说,浅拷贝仅复制了原始对象中元素的引用,而不是元素本身的拷贝classPeopleimplementsCloneable{privateStringname;privateint......
  • 【日常记录-Java】自定义进程池
    Author:赵志乾Date:2024-07-12Declaration:AllRightReserved!!!1.简介    服务器上有些进程需要池化管理,使用SpringBoot构建Web服务提供管理api,内部使用自定义的进程池维护已启动的进程;    核心点: 进程池管理的进程都会使用系统的一个端口对外提供服务; ......
  • 数据类型
    数据类型C语言数据类型学习数据类型三要素:宽度、格式、作用范围(作用域)整数类型char8bits1字节short16bits2字节int32bits4字节long32bits4字节在下图中我们可以看到char即是byte,short即word,int即dword(32位系统)当数据的长度超过所给类型的长度时......
  • Java怎么统计每个项目下的每个类别的数据
    为了演示如何在Java中统计每个项目下的每个类别的数据,我们可以考虑一个简单的场景:假设我们有一个电商系统,需要统计每个商品分类在每个店铺下的销售数量。这里我们将使用Java的集合框架,如HashMap和ArrayList,来存储和统计数据。1.使用Java的集合框架HashMap和ArrayList来存储和统计......
  • 关于Java内存区域的理解和记录
    近期做项目遇到了FullGC的问题,干脆总结一下Java内存区域分布和垃圾回收是咋回事。Java内存区域按照线程隔离状态直接分成三大块空间:线程私有:程序计数器是一块较小的内存空间,可以看做当前线程所执行的字节码的行号指示器。在虚拟机概念模型里,字节码解释器工作时就是通过改变这......
  • Java中的递归算法详解
    Java中的递归算法详解大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!1.什么是递归算法?递归算法是指在函数的定义中使用函数自身调用的方法。在算法中,递归通常用于解决可以被拆分为相似子问题的问题,每个子问题都是原始问题的一部分。2.递归算法的基本......
  • Java中的反序列化详解
    Java中的反序列化详解大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!1.什么是反序列化?反序列化是将对象的字节序列转换回对象的过程。在Java中,对象序列化是将对象转换为字节序列以便存储或传输,而反序列化则是将这些字节序列重新转换为对象。2.Java中......
  • Java Redis多限流
    JavaRedis多限流在Java中实现Redis多限流通常涉及使用Redis的某些特性,如INCR、EXPIRE、Lua脚本或者更高级的Redis数据结构如RedisBitmaps、RedisStreams结合RedisPub/Sub,或者使用Redis的第三方库如RedisRateLimiter(基于Lua脚本或Redis自身功能实现)。然而,为了直接和易于实现......
  • Java中的排序算法详解
    Java中的排序算法详解大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!1.排序算法概述排序算法是计算机科学中的基础问题,它将一组元素按照特定的顺序重新排列。在实际开发中,选择合适的排序算法可以显著提高程序的性能。2.冒泡排序(BubbleSort)冒泡排序......