[英]Instantiating JAVA Array of Generic Class
E[] arr = (E[])new Object[INITIAL_ARRAY_LENGTH];
上面的代码是从取此以下职位:
其中E
是泛型类。 当我们使用对象类型实例化数组时,编译器/ JVM如何知道需要分配多少内存。 我的理解是,类型转换只允许更改引用类型,但不允许更改底层对象结构。
某种大小的引用类型的数组将在内存中占据相同的大小,而不管它持有什么类型的对象。 这是因为内存只保存引用(指针),而不是创建这些对象时分配的数组项的内存。 然后,堆将在创建新对象并将其分配给数组时保留它们。
因此,以下数组将占用相同的大小:
new Integer[10]
new BigInteger[10]
new String[10]
new Object[10]
请注意,对于编译器,非约束通用类型的数组会转换为Object的数组。
另请注意,基元数组可能具有不同的内存占用。
.....
同样,这只是数组本身的内存, 而不是它引用的项目 - 这是所有这一点中非常重要的一点,可能是理解这一点的最重要的一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.