3

当我使用在 Java 中保存原始数组的泛型实现 Collection 时,实际存储在数组中的是什么?使用泛型定义集合意味着我只能存储一个对象,如果我要这样做,ArrayList<Integer>我可以添加一个int,但这会自动装箱到Integer.

如果我将ArrayList<int[]>其完全合法地定义为数组是对象。我不确定我实际上最终存储在集合中的是Integer[]编译器执行一些转换并将使用自动装箱添加到数组还是我可以存储int[]并且集合将存储原始数组作为数组本身是一个东西。

4

2 回答 2

2

ArrayList<int[]>将存储基元数组。将不涉及自动装箱。

在 Java 中,任何类型的数组(无论是否为原始类型)都是一个对象,因此与泛型兼容。

甚至有可能在不经意间以 的容器结束int[],正如昨天这个有趣的问题所示:Java containsAll does not return true when given lists

于 2013-03-28T10:07:55.037 回答
0

int[] 永远不会被装箱到 Integer[]。数组始终是引用类型,因此不需要装箱。
Java 总是将数组作为对象处理,无论它是原始数组还是对象数组。
下面是关于基元数组和对象数组的一些细节。有关更多详细信息,请参阅原始值对象数组。
我也建议你看看这个问题Java: Array of original data types does not autobox

于 2013-03-28T10:10:46.470 回答