类型提升
不同类型的数据之间相互运算的时候,数据类型小的会被提升到数据类型大的。
1.int与long之间:int会被提升为long
int a = 10;
long b = 20L;
int c = a + b;//编译出错:a+b==>int + long--->long + long赋值给int时会丢失数据
long d = a + b;//编译成功:a+b==>int + long --->long + long赋值给long
2.byte与byte的运算
byte a = 10;
byte b = 20;
byte c = a + b;
System.out.println(c);
//编译报错
Test.java:5:错误:不兼容的类型:从int转换到byte可能会有损失
byte c = a + b;
^
结论:byte和byte都是相同类型,但是出现编译报错,原因是,虽然a和b都是byte类型,但是计算a + b会将a和b都提升称为int类型,再进行计算,得到的结果也是int类型,这时赋值给c,就会出现上述错误。
由于计算机的CPU通常是按照4个字节为单位从内存中读写数据,为了硬件上实现方便,诸如byte和short这种低于4个字节的类型,会先提升成int,再参与计算。
正确的写法:
byte a = 10;
byte b = 20;
byte c = (byte)(a+b);
System.out.println(c);
【类型提升小结】:
-
不同类型的数据混合运算,范围小的会提升成范围大的
-
对于short,byte这种比4个字节小的类型,先会提升成4个字节的int,再运