编译器的两点优化

1.对于byte/short/char三种类型来说,如果右侧的赋值的数值没有超过范围,那么javac编译器将会自动隐含的为我们补上一个(byte),(short),(char)。如果右侧超过左侧范围,编译器直接报错。

 右侧没有超过左侧的范围

编译器的两点优化

编译器的两点优化

右侧超过了左侧的范围

编译器的两点优化

 编译器的两点优化

 2.再给变量赋值的时候,如果右侧表达式全是常量,没有任何变量,那么编译器javac将会直接将若干个常量表达式计算得到结果

编译器的两点优化

编译器的两点优化

 编译器的两点优化

 short result = 5+8;等号右边全是常量,没有任何变量参与运算,编译之后,得到的.class文件相当于short result = 13;

且右侧的常量结果数值没有超过左侧范围,所以正确。这成为“编译器的常量优化”。

但是注意:一旦表达式中有变量参与,就不能进行这种优化了。