zoukankan      html  css  js  c++  java
  • Java编译器的优化

    public class Notice {
        public static void main(String[] args) {
            // 右侧20是一个int类型,但没有超过左侧数值范围,就是正确的
            // int --> byte 不是自动类型转换
            byte num1 = 20;
            System.out.println(num1); // 20
            
            // 错误:不兼容的类型: 从int转换到byte可能会有损失
            // byte num2 = 128;
            // System.out.println(num2);
            
            char zifu = 65;
            System.out.println(zifu); // A
        }
    }

    对于byte/short/char三种数据类型,如果右侧没有超过左侧数值范围,则编译器会自动进行优化,在右侧隐含地添加(byte) / (short) / (char)

    如果右侧超过左侧数值范围,则编译器直接报错。

    public class Notice2{
        public static void main(String[] args){
            short num1 = 10, num2 = 8;
            // short + short --> int + int --> int
            // short = int + int
            // short num3 = num1 + num2; // 错误写法,左侧需要的是int类型
            // System.out.println(num3);
            
            // 右侧只有常量,没有变量参与运算
            short num4 = 10 + 8;
            System.out.println(num4); // 18
        }
    }

    在给变量赋值时,如果右侧表达式中只有常量,没有变量,那么编译器javac会直接计算出右侧的值,然后赋值给左侧,编译后的.class文件里直接就是 short num4 = 18

    这称为“编译器的常量优化”,但是一旦表达式中有变量,则不能进行这种优化。

  • 相关阅读:
    中国剩余定理及拓展
    20191128-1 总结
    获取动态图
    弹球游戏设计
    作业要求 20191121-1 每周例行报告
    作业要求 20191114-1 每周例行报告
    对现组内成员的感谢
    作业要求 20191107-1 每周例行报告
    20191031-1 每周例行报告
    作业要求 20191024-1每周例行报告
  • 原文地址:https://www.cnblogs.com/roadlandscape/p/12045837.html
Copyright © 2011-2022 走看看