优化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类型,因此编译失败

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄