编译器的两点优化

优化1:

对于byte/short/char三种类型来说,如果右侧赋值的数值没有超过范围,那么javac编译器会自动隐藏的为我们补上一个强制类型转换。如果超过了范围,那么编译器会直接报错

代码举例:

public class Demo12Notice {
    public static void main(String[] args) {
        byte b1 = 15; // 等价于    byte b = (byte)15;
        //  byte b2 = 26565; //错误 超过了范围

    }
}

优化2:

在给变量进行赋值的时候,如果右侧的表达式当中全都是常量,没有任何变量。那么编译器将会直接将若干个表达式计算得到结果。一旦有变量参与运算了就不能进行这种优化了。

代码举例

public class Demo13Notice {
    public static void main(String[] args) {
        byte a = 5;
        byte b = 6;
        //  byte c = a + b;错误: 变量参与运算,常量无法优化
        byte c = 5 + 6; // ,全部是常量,可以进行常量优化
        

    }
}

猜你喜欢

转载自www.cnblogs.com/wurengen/p/10841475.html