变量相加和常量相加的区别
class Test1 {
public static void main(String[] args[]) {
byte b1 = 5;
byte b2 = 6;
byte b3 = b1 + b2;
System.out.println("b3的值是" + b3);
}
}
此时会报错:
原因有两个方面:
- byte 与 byte(或short、char) 进行运算时会自动提升成int类型,然而两个int类型相加的结果也是int 类型
- b1 和 b2 是变量,变量存储的值是变化的,在编译的时候无法判断里面具体的值,相加有可能超出byte的取值范围,若是其值不超出取值范围,则可以运行出来,但编译的时候还是会报错
class Test1 {
public static void main(String[] args[]) {
byte b1 = 5;
byte b2 = 6;
byte b3 = 5 + 6
System.out.println("b3的值是" + b3);
}
}
上面这个代码会正常运行,虽然说5+6=11是int 类型,但11在byte的取值范围内,他的值是固定的,在编译的时候就能判断出它是符合的,所以不会报错,还有,java 有常量优化机制,所以只要没超出范围就不会报错。