编译器的两点优化
优化1:
对于byte/short/char三种类型说。如果右侧赋值的数值没有超过范围。那么Java编译器会隐藏帮我们加上一个强制类型转换。
超出范围,则报错
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。优化2 编译器的常量优化
给变量赋值的时候,如果右侧的表达式中全部是常量,没有任何变量,那么编译器将会将常量表达式计算得到结果。对于byte/short/char三种类型说如果右侧赋值的数值没有超过范围,会帮我们隐藏加上强制类型转换。一旦变量参与表达式运算,那么就不能进行这种优化了。
需求:
下面的程序有问题吗?
public class Demo012Operator { public static void main(String[] args){ byte b1=1; byte b2=2; byte b3=1 + 2; byte b4=b1 + b2; System.out.println(b3); System.out.println(b4); } }
分析:
分析: b3 = 1 + 2 , 1 和 2 是常量,为固定不变的数据,在编译的时候(编译器javac),已经确定了 1+2 的结果并没
有超过byte类型的取值范围,可以赋值给变量 b3 ,因此 b3=1 + 2 是正确的。
反之, b4 = b2 + b3 , b2 和 b3 是变量,变量的值是可能变化的,在编译的时候,编译器javac不确定b2+b3的结果是什
么,因此会将结果以int类型进行处理,所以int类型不能赋值给byte类型,因此编译失败

更多精彩