一道面试题:
package Test01;
public class Demo01 {
public static void main(String[] args) {
byte b1=1,b2=2,b3,b6;
final byte b4=4,b5=6;
b6=b4+b5;//1
b3=(b1+b2);//2
System.out.println(b3+b6);
}
}
结果2处会出错,为什么呢?
这里有一个关于数据类型自动提升的问题
1、所有byte short char类型的值都会提升为int类型在参与计算
2、如果一个操作数为float,则结果为float;
3、如果一个操作数为long,则结果为long
4、如果一个操作数为double,则结果为double
对于这一题1处的语句由于b4,b5定义为final类型,它们不会转型,JVM将b4+b5看成是byte常量10,编译通过,而2处b1,b2会转化成int在相加,结果为int,所以要转化成byte才能赋值给b3;