看书的时候看到“泛型类被它的所有实列所共享”,不是很理解这句话。书上给出的解释如下: 以下面的方式创建list1和list2: ArrayList<String> list1 = new ArrayList<>(); ArrayList<Integer> list2 = new ArrayList<>(); 尽管在编译的时候ArrayLIst<String>和ArrayList<Integer>是两种不同的类型,但是,在运行时只有一个ArrayList类加载到JVM中。为什么两个ArrayList类最终只有一个加载到JVM中去?请指教,谢谢
1 回答
波斯汪
TA贡献1811条经验 获得超4个赞
我感觉从CLASS字节码文件上更好理解,ClASS对应的是具体的一个类。
ArrayList 在JRE中的定义类只有一个ArrayList<Object>,因此,你见过JRE中有ArrayList<String>和 ArrayList<Integer>这两个类么?
String和Integer只是ArrayList<Object>实例化时的两个参数而已,
再准确一点
ArrayList<String> list1 = new ArrayList<>();
ArrayList<Integer> list2 = new ArrayList<>();
只是两个对象,而不是两个类(JVM不可能动态生成一个类的),JVM 加载的是类CLASS文件(实实在在的类),为不是这两个值,他们指向的都是ArrayList<Object>类的class文件
添加回答
举报
0/150
提交
取消