深入理解JVM11-早期(编译期)优化(语法糖-泛型和类型擦除)

深入理解JVM-早期(编译期)优化

深入理解JVM11-早期(编译期)优化(语法糖-泛型和类型擦除)_第1张图片

javac编译

编译过程大致可以分为3个过程。

  • 解析与填充符号表过程
  • 插入式注解处理器的注解处理过程
  • 分析与字节码生成过程

语法糖:指在计算机语言中添加某种语法,这种语法对语言的功能并没有影响。但是更方便程序员使用。

Java语法糖

1.泛型和类型擦除

范型是jdk1.5的一项新增特性,它的本质是参数化类型的应用。也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类,接口和方法的创建中。分别称为范型类,范型接口和范型方法。

深入理解JVM11-早期(编译期)优化(语法糖-泛型和类型擦除)_第2张图片
深入理解JVM11-早期(编译期)优化(语法糖-泛型和类型擦除)_第3张图片

java语言中的范型不一样,它旨在源码中汆载,在编译后的字节码已经替换为原来的原生类型了,并且在相应的地方插入了强制转型代码。因此,对于运行期的java语言来说。arraylist arraylist就是一个类。所以范型技术实际上是java语言的一个语法糖,java语言中范型实现方法称为类型擦除。基于这种方法实现的范型称为伪范型。

深入理解:http://www.cnblogs.com/drizzlewithwind/p/6101081.html

2.自动装箱/拆箱与遍历循环

注意:包装类的‘==’运算在不遇到算术运算的情况下不会自动拆箱。以及他们的equals()方法不处理数据转型的关系。

package javatest;

public class boxtes {
    public static void main(String[] args) {
        Integer a=1;
        Integer b=2;
        Integer c=3;
        Integer d=3;
        Integer e=321;
        Integer f=321;
        Long g=3L;
        System.out.println("1" +(c==d));//true
        
        System.out.println("2"+(e==f));//false
        
        System.out.println("3"+(c==(a+b)));//true

        System.out.println("4"+(c.equals(a+b)));//true equals不处理数据转换的关系

        System.out.println("5"+(g==(a+b)));//true 遇到运算== 会拆箱

        System.err.println("6"+(g.equals(a+b)));//false equals不处理类型转换的关系 只会自动拆装箱
        
    }
}

条件编译

深入理解JVM11-早期(编译期)优化(语法糖-泛型和类型擦除)_第4张图片

ps:只有使用条件为常量的if语句才能达到上述效果。

你可能感兴趣的:(深入理解JVM11-早期(编译期)优化(语法糖-泛型和类型擦除))