实例化泛型类的JAVA数组 - java

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

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

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

参考方案

某种大小的引用类型的数组将在内存中占据相同的大小,而不管它所持有的对象是什么类型。这是因为内存仅保存引用(指针),仅此而已,而不保存创建这些对象时分配的数组项的内存。然后,堆将在创建新对象并将其分配给数组时保留它们。

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

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

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

还要注意,图元数组可能具有不同的内存占用量。

.....

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

Java-固定大小的列表与指定初始容量的列表之间的差异 - java

我在理解这一点上遇到了问题。当我们做 List<Integer> list = Arrays.asList(array); 我们不能在该列表上使用添加,删除之类的方法。我知道Arrays.asList()返回固定大小的列表。我不明白的是,如果我们创建一个具有指定初始容量的列表,例如List<Integer> list2 = new A…

从方法返回数组-Java - java

private static Coordinate[] getCircleCoordintaes() { Coordinate coordinates[] = {new Coordinate(0, 0)}; return coordinates; } 以上程序工作正常。在上面的程序中,返回的坐标数组首先初始化了数组使用这条线Coordinate coordi…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java:BigInteger,如何通过OutputStream编写它 - java

我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…

JAVA:如何检查对象数组中的所有对象是否都是子类的对象? - java

我有一个对象数组。现在,我要检查所有这些对象是否都是MyObject的实例。有没有比这更好的选择:boolean check = true; for (Object o : justAList){ if (!(o instanceof MyObject)){ check = false; break; } } java大神给出的解决方案 如果您不喜欢循环,则…