ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java编译器的优化

2019-12-15 20:54:33  阅读:221  来源: 互联网

标签:short Java int System 编译器 println byte 优化


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

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

标签:short,Java,int,System,编译器,println,byte,优化
来源: https://www.cnblogs.com/roadlandscape/p/12045837.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有