关于两个被final修饰的byte相加赋值给一个byte变量,会不会编译出错的问题

211 阅读1分钟

上代码

byte b1=1,b2=2,b3,b6,b8; 
final byte b4=4,b5=6,b7=125; 
b6=b4+b5; //(1)不会发生编译错误
b3=(b1+b2); //(2)会发生编译错误
b8=b5+b7; //(3)会发生编译错误
System.out.println(b3+b6);

代码块(2)位置肯定会出现编译错误。

具体原因

b1和b2在相加时会发生类型提升,变为int,将一个int赋值给一个byte编译出错。

看代码块(1)(3)

代码块(1)位置编译不会出错。
代码块(3)位置编译出错。

具体原因

因为被final修饰的变量,在编译阶段就确定了该变量的值,并且不能再改变。
b4 + b5的值未超出byte的范围不会报编译错误。
b5 + b7的值131超出byte的范围不会报编译错误。