E[] arr = (E[])new Object[INITIAL_ARRAY_LENGTH];
上面的代码来自this以下帖子:
E
是通用类类型。当我们使用Object类型实例化数组时,编译器/ JVM如何知道需要分配多少内存。我的理解是,类型转换只允许更改引用类型,但不允许更改底层对象结构。
答案 0 :(得分:7)
一定大小的引用类型的数组在内存中占用相同的大小,无论它拥有什么类型的对象。这是因为内存只保存引用(指针),而不是创建这些对象时分配的数组项的内存。然后,堆将在创建新对象并将其分配给数组时保留它们。
因此,以下数组将占用相同的大小:
new Integer[10]
new BigInteger[10]
new String[10]
new Object[10]
请注意,对于编译器,非约束泛型类型的数组会转换为Object数组。
另请注意,基元数组可能具有不同的内存占用量。
.....
同样,这只是数组本身的内存,不它引用的项目 - 这是所有这一点中非常重要的一点,可能 理解这一点最重要的一点。