面试题:看下列程序是否有问题,如果有,请指出并说明
public static void main(String[] args) {
byte b1=3;
byte b2=4;
byte b3=b1+b2;
byte b4=3+4;
System.out.println(b3);
System.out.println(b4);
}
System.out.println(b3);错误:从两方面来说:
1.byte和byte(或char,short)进行运算时都会提升为int类型 (因为整数默认类型是int,两个int类型相加还是int类型)
2. b1和b2是两个变量,变量存储的值是从变化的,在编译时无法判断里面具体的值,相加有可能会超出byte的取值范围
System.out.println(b4);运行正确
有人会问为什么会正确运行呢,3是int类型,4也是int类型,相加不还是int类型吗,而b4是byte类型。
答: Java编译器有常量优化机制,即在编译是会先算出3+4=7,而7在-128到127之间,所以可以正常的赋值给byte。