变量的类型转换
1、自动类型转换
自动类型装换也叫隐式类型转换,指的是两种数据类型转换类型在转换的过程中不需要显式地进行声明。当一个类型取值范围小的数值直接赋给另一个取值范围大的数据类型变量时,系统就会进行自动类型转换,否则需要进行强制类型转换
Java中支持不同数据类型自动转换图
低------------------------------------------------------------------------------------------------------------------------------->高
注意 一般来说类型转换的时候字节小的向字节大转换是可行的,唯有下面这种类型的转换编译都不能通过的,就是byte类型不能转换成char类型 ,char类型也不能转换成short类型
byte、char、short 都不能同类型转换 ,b 和 s4 之所以可以编译通过是因为 ‘+=’ 有自动转换的功能 就是 b1 + b2 时自动转换成了int 类型 进行运算 然后把结果 再转成byte类型,short 也是如此, 其实这算是强转的一种了 因为去掉 byte b 其本身就是int 类型的结果只不过我们把它转成byte 类型来接收了
综合上面的两点来说 byte 、short 不做运算时是可以 进行自动转换的,byte、short、char 之间做运算时都不能相互转换 最后唯有转成 int 类型来接收结果的原因是 三者 的范围实在太小了 例如 byte 最大就 -128 ~127 的范围 简单的做个三位数或者 两位数 乘除运算就容易超出范围了,而int的范围的能满足一般的运算结果 。所以 jdk 上就不允许 这样编写代码 一律 使用 int 类型来进行计算 的规范,避免不必要的错误发生,至于最后把结果强转成其他类型是另一回事了。
2、强制类型转换
强制类型转换也叫显示类型转换,指的是两种数据类型之间的装换需要显示的声明。当两种类型彼此不兼容,或者目标类型取值范围小于源类型时,自动类型转换无法进行,这时就需要进行强制类型转换。例子:
public static viod main(String[] args){
int num=4;
byte b=(byte)num;
System.out.println(b);
}
注意:在对变量进行强制类型转换时,会发生取值范围较大的数据类型向取值范围较小的数据类型的转换情况,如将一个int类型的数转换为byte类型,这样做极容易造成数据精度的丢失。例如
byte a;
int b=298;
a=(byte)b;
System.out.println("b="+b);
System.out.println("a="+a);