Java集合.为什么没有原始类型?

13 java collections arraylist primitive-types

可能重复:
在java集合中存储原始值?

我的Java教科书说集合的元素,例如ArrayList,不能是原始类型.是否有一个原因?我的意思是Sun的某个人是否决定了这一点,或者是否存在阻碍这样做的障碍?我理解我的例子半答案我的问题,因为ArrayList需要一个对象,而原语不是对象.但后来我想为什么它们也不能有原始类型呢?

Dan*_*ker 8

这样做有什么障碍吗?

您可以编写近乎相同的版本,ArrayList这些版本是为了存储其中一种非类型类型而定制的,例如IntegerArrayList,依此类推.阻碍这种情况的障碍是,这样的类会爆炸,因为你将原始类型的数量乘以集合类型的数量.为了使标准集合框架易于管理,这被排除在外.

要在语言中更加巧妙地解决这个问题,您需要泛型来允许基本类型作为类型参数,并改善数组和泛型之间的交互.


T.J*_*der 6

存储未包装的原语会使集合代码变得非常复杂.然而,随着包装(Integerint等),代码是相当直接的.几年来,Java已经支持"自动装箱",这意味着,如果你给一个int地方的Integer预期下,int在一个包裹起来Integer实例为你(反之亦然).


小智 5

有一些称为“包装器”的对象代表所有原始类型。例如,有一个名为的类Integer支持int. 您可以使用原始包装器来保存集合中的值。

原始类型(至少在 Java 5 之前)的问题在于它们没有从基Object类扩展。所有集合都需要为它们正在使用的所有方法指定一个类——并且它们指定Object,因为Object是所有类的基础。

从 Java 5 开始,您会发现 Java 会在您需要时隐式地在原语和相应的包装类之间切换。这意味着您可以将int、 或double等添加到集合中。VM 会自动为您将原语包装在包装类中,并将包装放在集合中。

  • “原始类型的问题(至少在 Java 5 之前)”......以及更高版本。虽然现在有自动装箱,但仍然没有基本类型的通用基类。 (7认同)