自动装箱/自动拆箱及反编译观察
集合中只能装入引用数据类型,不能装入基本数据类型。如,装入int类型的数值123会自动装箱。
下面是源码:
package com.test;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
//下面的泛型会擦除
List<Integer> list = new ArrayList<>(6);
//下面会触发编译器自动装箱
list.add(1);
//下面会触发编译器自动拆箱
int i = list.get(0);
}
}
编译,接着使用反编译工具打开字节码文件,得到java源文件如下:
package com.test;
import java.util.ArrayList;
import java.util.List;
public class Test
{
public static void main(String[] args)
{
List list = new ArrayList(6);
list.add(Integer.valueOf(1));
int i = ((Integer)list.get(0)).intValue();
}
}
总结:我们看到注释和泛型在字节码文件里是被过滤掉的,看不到的——注释是源码级别的。
而自动装箱和自动拆箱是加上去的,可以看到的——自动装箱/拆箱是字节码文件级别的。