数据类型转换案例练习
案例:
-
定义三个byte类型的变量,给b1,b2赋值,b没有值
-
首先我们让b1与b2相加,这时候还不等我们运行程序,编译器就已经报错,提示“change type of ‘b’ to int”错误信息,当我们强行运行后,控制台爆出“cannot convert from int to byte”错误信息,意思是:“无法将int转换为字节”。这就纳闷了,明明使用的两个byte类型相加,为什么提示无法将int转换为字节呢?原因是:Java在基本数据类型进行计算的时候,会将整型的数字先转化为int类型,然后进行计算,b1+b2则转化为 (int)1+(int)2=(int)3,计算后返回的值为int类型,因为byte类型数值范围小于int类型,又没有强制转换,所以编译器认为这样做不合法,会损失数据精度,因此报错[^1]。
- 下面我们来看b = 3 + 4 会是什么结果:
-由图可见:b = 3+4通过编译并运行成功返回7,这时候可能就有些疑惑了,为什么 b = b1+b2不行,而b = 3+4可以呢?此处我们借助反编译工具(XJad)看一下编译器对b=3+ 4是如何处理的:
-由反编译class文件得出,编译器在编译当前类的Java文件时,1和2是两个byte类型的常量,先把结果计算出来后,然后判断结果是否在byte范围内(-128~127),如果在就不报错,输出结果。
-
注:数据类型(小 -->大)
数据类型 所占字节 boolean 未定 byte 1字节 char 2字节 short 2字节 int 4字节 long 8字节 float 4字节 double 8字节