- 强制类型转换:又称为“显示类型转换” ,是从存储范围较大的类型转换为存储范围较小的类型,在转换过程中可能会造成数据损失。
例:常见得面试题
byte a = 300 ;
System.out.println("a="+a);
分析:byte 只占一个字节,可接收得数据范围是-128~127;300>127,明显已经超出了byte的可接收数据范围,语句会报错,
/*
常数300:0000 0000 0000 0000 0000 0001 0010 1100
byte: 0000 0000
*/
如何解决:使用强制类型转换
byte a = (byte) 300;
System.out.println("a="+a);
/*
常数300:0000 0000 0000 0000 0000 0001 0010 1100
byte: 0000 0000
强制转换类型后只能截取到目标数据类型最大范围数
截取------------------------------------- 0010 1100
截取的数据是操作后的数据为补码,所以还要对其取原码
0010 1100 --------正数
正数:原码等于反码等于补码
*/
注意:
/*
注意事项:赋值运算符+= , -= , *= , /= , %=中都隐藏有强制类型转换
*/
short a = 1;
sum += a; //相等于 short sum = (short)(sum+a);
隐式类型转换:又称默认类型转换,是从存储范围较小得类型转换为存储范围大的类型
byte 、short、 char三者之间不转换,一旦参与运算,会先默认转换为 int 类型后再参与运算。
short a = 1;
char str = 'a';
byte b = 20;
int sum = a + str ;
int sum2 = a + b ;
int sum3 = b + str ;
System.out.println("sum="+sum) ;
System.out.println("sum2="+sum2) ;
System.out.println("sum3="+sum3) ;
结果:
sum=98
sum2=21
sum3=117