实例化通用类的JAVA数组

时间:2014-09-20 04:57:32

标签: java arrays generics instantiation allocation

E[] arr = (E[])new Object[INITIAL_ARRAY_LENGTH];

上面的代码来自this以下帖子:

E是通用类类型。当我们使用Object类型实例化数组时,编译器/ JVM如何知道需要分配多少内存。我的理解是,类型转换只允许更改引用类型,但不允许更改底层对象结构。

1 个答案:

答案 0 :(得分:7)

一定大小的引用类型的数组在内存中占用相同的大小,无论它拥有什么类型的对象。这是因为内存只保存引用(指针),而不是创建这些对象时分配的数组项的内存。然后,堆将在创建新对象并将其分配给数组时保留它们。

因此,以下数组将占用相同的大小:

new Integer[10]
new BigInteger[10]
new String[10]
new Object[10]

请注意,对于编译器,非约束泛型类型的数组会转换为Object数组。

另请注意,基元数组可能具有不同的内存占用量。

.....

同样,这只是数组本身的内存,它引用的项目 - 这是所有这一点中非常重要的一点,可能 理解这一点最重要的一点。