先引入一个例题:
public calss Test{
public static void main(String[] args){
byte b1=1,b2=2,b3,b6;
final byte b4=4,b5=5;
b6=b4+b5;
b3=b1+b2;
System.out.println(b3+b6);
}
}
关于上述代码片段叙述正确的是:
语句b3=b1+b2编译出错
解释:byte类型进行变量之间的计算时,是会将类型提升到int类型再进行计算的。
----------在b3=b1+b2中,b1,b2是byte型,java中进行计算时需要将他们提升为int类型,再进行计算,b1+b2计算后已经是int类型,赋值给b3,b3是byte类型,类型不匹配,若没有强转,那么编译就不会通过,因为int类型不能直接赋值给byte类型,如若需要,则需要强转。
但b6同样被两个byte赋值了,为什么它不报错?
----------原因就在于final,被final修饰的变量是一个常量,在这里b4可以替换成3,b5可以替换成4。即:b6=4+5;不涉及类型提升,在编译时就已经变成了b6=9
总结:Java中的byte,short,cha