byte b1=10;
System.out.println("b1="+b1);
b1=b1+2;
这里会报错:“不兼容的类型:从int转换到byte可能会有损失”
大家可能会想这里的2是直接量 java默认整形直接量是itn类型,
所以byte+int=int 产生报错;
但是我们修改一下:
b1=b1+(byte)2;
依旧报错:“不兼容的类型:从int转换到byte可能会有损失”
其实这里是编译器的优化,因为byte单位是1字节,范围为-128~127
两个byte相加运算很容易产生溢出,所以编译器自动把它转换成int类型
所以两个int相加,结果为int 再赋值给byte 产生报错。
这里,我们修改过后如下:
b1=(byte)(b1+2);
就不会产生报错了。
这里
b1=(byte)(b1+2);
和
b1 += 2;
是等价的
这也是面试的一个考点。
b1 += 2;等价于b1=(byte)(b1+2);
而不是等价于b1=b1+2;