【问题标题】:Instantiating JAVA Array of Generic Class实例化泛型类的JAVA数组
【发布时间】:2014-09-20 04:57:31
【问题描述】:
E[] arr = (E[])new Object[INITIAL_ARRAY_LENGTH];
以上代码取自this以下帖子:
其中E 是泛型类类型。当我们使用类型 Object 实例化数组时,编译器/JVM 如何知道它需要分配多少内存。我的理解是,类型转换只允许更改引用类型,而不是底层对象结构。
【问题讨论】:
标签:
java
arrays
generics
instantiation
allocation
【解决方案1】:
具有一定大小的引用类型的数组在内存中将占用相同的大小,无论它包含什么类型的对象。这是因为内存只保存引用(指针),仅此而已,而不是创建这些对象时分配的数组项的内存。然后堆将在新对象被创建并分配给数组时保存它们。
因此,以下 数组 都将占用相同的大小:
new Integer[10]
new BigInteger[10]
new String[10]
new Object[10]
请注意,对于编译器,非约束泛型类型的数组将转换为 Object 数组。
另请注意,基元数组可能具有不同的内存占用。
.....
同样,这只是数组本身的内存,不是它引用的项目——这是所有这一切中非常重要的一点,可能是理解这一点最重要的一点。