优化1

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

  • 如果没有超过左侧的范围,编译器补上强转。
  • 如果右侧超过了左侧范围,那么直接编译器报错。

代码举例

public class MyDemo11Notice {
    public static void main(String[] args) {
        // 右侧确实是一个int数字,但是没有超过左侧的范围,就是正确的。
        // int --> byte,不是自动类型转换
        byte num1 = /*(byte)*/ 30; // 右侧没有超过左侧的范围
        System.out.println(num1);

        // byte num2 = 128; // 右侧超过了左侧的范围,报错
        // int --> char,没有超过范围
        // 编译器将会自动补上一个隐含的(char)
        char c = /*(char)*/ 65;
        System.out.println(c);
    }
}

代码运行之后的结果

优化2

在给变量进行赋值的时候,如果右侧的表达式当中全都是常量,没有任何变量,那么编译器javac将会直接将若干个常量表达式计算得到结果。例如:short result = 5 + 8; // 等号右边全都是常量,没有任何变量参与运算编译之后,得到的.class字节码文件当中相当于【直接就是】:short result = 13;右侧的常量结果数值,没有超过左侧范围,所以正确。这称为“编译器的常量优化”。但是注意:一旦表达式当中有变量参与,那么就不能进行这种优化了。

代码举例

public class MyDemo12Notice {
    public static void main(String[] args) {
        short num1 = 10; // 正确写法,右侧没有超过左侧的范围,

        short a = 5;
        short b = 8;
        // short + short --> int + int --> int
        // short result = a + b; // 错误写法!左侧需要是int类型

        // 右侧不用变量,而是采用常量,而且只有两个常量,没有别人
        short result = 5 + 8;
        System.out.println(result);

    }
}

代码运行之后的结果

Java编译器的2点优化的更多相关文章

  1. 【原创】Java编译器对String的优化

    首先看以下的代码: public static void main(String[] arge) { String str1 = new String("1234"); Strin ...

  2. java编译器优化和运行期优化

    概述    最近在看jvm优化,总结一下学习的相关知识 (一)javac编译器 编译过程 1.解析与填充符号表过程 1).词法.语法分析    词法分析将源代码的字符流转变为标记集合,单个字符是程序编 ...

  3. ☕【Java技术指南】「编译器专题」重塑认识Java编译器的执行过程(常量优化机制)!

    问题概括 静态常量可以再编译器确定字面量,但常量并不一定在编译期就确定了, 也可以在运行时确定,所以Java针对某些情况制定了常量优化机制. 常量优化机制 给一个变量赋值,如果等于号的右边是常量的表达 ...

  4. Java编译器的优化

    public class Notice { public static void main(String[] args) { // 右侧20是一个int类型,但没有超过左侧数值范围,就是正确的 // ...

  5. Java内存模型及性能优化

    最近在做一个项目的性能优化,遇到好多以前没有关注过的性能问题,一头雾水,今天做个笔记,简单记录下JVM相关的参数设置. 一.JVM内存模型 首先介绍下Java程序具体执行的过程: Java源代码文件( ...

  6. 警惕Java编译器中那些“蜜糖”陷阱

    一.前言 随着Java编译器不断地向前发展,它为程序员们提供了越来越多的“蜜糖”(compiler suger),极大地方便了程序的开发,例如,foreach的增强模式,自动拆箱与装箱以及字符串的连接 ...

  7. Java高级开发_性能优化的细节

    一.核心部分总结: 尽量在合适的场合使用单例[减负提高效率] 尽量避免随意使用静态变量[GC] 尽量重用对象,避免过多过常地创建Java对象[最大限度地重用对象] 尽量使用final修饰符[内联(in ...

  8. 打印class文件的Java编译器内部的版本号

    当改变了jdk版本时,在编译java时,会遇到Unsupported major.minor version错误.错误信息如下 : Unsupported major.minor version 50 ...

  9. 高吞吐低延迟Java应用的垃圾回收优化

    高吞吐低延迟Java应用的垃圾回收优化 高性能应用构成了现代网络的支柱.LinkedIn有许多内部高吞吐量服务来满足每秒数千次的用户请求.要优化用户体验,低延迟地响应这些请求非常重要. 比如说,用户经 ...

随机推荐

  1. 有了AOE,妈妈再也不用担心我的模型管理!

    前言 越来越多的业务会用到AI相关的技术,大多数的AI模型是部署在云端使用的,毕竟服务端计算更快,管理也更容易.随着终端设备性能提升,在终端使用 AI 模型有了更大的价值,可以更好满足业务对响应实时性 ...

  2. 浅谈——MySQL存储引擎

    博文大纲: 一.MyISAM存储引擎: 二.InnoDB存储引擎: 三.Memory存储引擎特点: 四.如何选择合适的存储引擎? 前言 数据库存储引擎是数据库底层软件组件,数据库管理系统(DBMS)使 ...

  3. 12c新特性 在线操作数据文件

    我们都知道,oracle pre-12c之前,若是想要把一个数据文件改名或者迁移, 必须在归档模式下先把这个数据文件offline之后, 然后进行OS上的copy或者rename 操作, 最后在sql ...

  4. Nginx基础知识点总结和优化项

    1.什么是Nginx? Nginx是一个高性能的HTTP和反向代理服务器,常用于做负载均衡服务器 2.为什么要用Nginx?跨平台.配置简单非阻塞.高并发连接:处理2-3万并发连接数,官方监测能支持5 ...

  5. 计算机网络知识之TCP/IP协议簇

    OSI参考模型 OSI的来源         OSI(Open System Interconnect),即开放式系统互联. 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网 ...

  6. curl 带 body

    curl -H "Content-Type:plain/text" -X POST -d '<?xml version="1.0" encoding=&q ...

  7. 【问题篇四】启动报DataSource错误

    初建一个简单的spring boot 项目,启动后会报错:就是在项目启动的时候在 resource目录下没有加载到配置信息:如果项目只是想简单的启动运行,不进行数据库操作可以在 启动类上做如下处理便可 ...

  8. Dubbo学习笔记-Zookeeper连接失败

    1. 检查服务器的zookeeper端口是否开放,默认为2181 2. 检查zookeeper是否运行成功 # 进入bin文件夹 cd /usr/local/zookeeper/bin # 重启 zk ...

  9. Web安全测试学习笔记-DVWA-SQL注入-1

    SQL注入的定义网上很多,作为一个初学者,我对SQL注入的理解是这样的:网站应用一般都有后台数据库(不论是关系型还是非关系型),用户在网站上的绝大部分操作,最终都会跟数据库交互(也就是执行一串SQL语 ...

  10. Python 从入门到进阶之路(一)

    人生苦短,我用 Python. Python 无疑是目前最火的语言之一,在这里就不再夸他的 NB 之处了,本着对计算机编程的浓厚兴趣,便开始了对 Python 的自学之路,并记录下此学习记录的心酸历程 ...