深入理解JVM-早期(编译期)优化
javac编译
编译过程大致可以分为3个过程。
- 解析与填充符号表过程
- 插入式注解处理器的注解处理过程
- 分析与字节码生成过程
语法糖:指在计算机语言中添加某种语法,这种语法对语言的功能并没有影响。但是更方便程序员使用。
Java语法糖
1.泛型和类型擦除
范型是jdk1.5的一项新增特性,它的本质是参数化类型的应用。也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类,接口和方法的创建中。分别称为范型类,范型接口和范型方法。
java语言中的范型不一样,它旨在源码中汆载,在编译后的字节码已经替换为原来的原生类型了,并且在相应的地方插入了强制转型代码。因此,对于运行期的java语言来说。arraylist<int> arraylist<String>就是一个类。所以范型技术实际上是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不处理类型转换的关系 只会自动拆装箱
}
}
条件编译
ps:只有使用条件为常量的if语句才能达到上述效果。