为什么int在java中自动更改为Integer?

当我将原始类型int放入java中的ArrayList时,为什么原始类型int会自动更改为对象Integer?

Autoboxing自动将primitive类型转换为适当的wrapper对象。 其背后的原因是你不能将原语放入集合中。 在Java 5出现之前,您必须自己完成此操作,但现在这将自动为您处理。

有关详细信息,请参阅此链接: http : //docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html

它在java中称为auto-boxing

正如任何Java程序员所知,您不能将int(或其他原始值)放入集合中。 集合只能保存对象引用,因此必须将原始值装入适当的包装类(在int的情况下为Integer)。 当您从集合中取出对象时,您将获得放入的Integer; 如果需要int,则必须使用intValue方法取消对Integer的装箱。 所有这些装箱和拆箱都是一种痛苦,并使你的代码变得混乱。 自动装箱和拆箱function可自动完成整个过程,消除痛苦和杂乱。

链接

ArrayList只能存储对象。 int是原始数据类型,因此它与对象等效“自动装箱”。 这只发生在Java 5之前,之前您必须自己打包整数。

自动装箱发生,因为集合只能容纳对象而不是基元。 如果你需要一个int原语,你必须在读出它时使用intValue()方法将其解包。

这是java 1.5引入的java语言特性。 它被称为自动装箱

粗略地说,它在java原始类型之间转换为相应的包装类类型。 编译器检测何时需要(并且可能)收件箱(原始到包装)或发件箱(包装器到原语),并将表达式扩展为正确的字节代码。

因此,在后台添加int时,会将一个Integer实例添加到列表中。

请阅读有关引用类型和值类型的更多信息,以便更好地理解它。

ArrayList仅保存对对象的引用。 它本身并不具备价值。

由于int是值类型,因此它没有引用。 将int转换为Integer时,在内存中为包含int值的Integer和对您创建的Integer对象的引用创建一些空间。

现在,您的ArrayList只是将地址保存到您拥有的Integer对象,而不是保留整数本身。

您可以这样想:ArrayList中的一个元素占用内存块:200。您的Integer对象位于内存块中:400。在内存块200中,不保留整数值,而是保留内存地址400。

原因,我不知道。 我猜他们只是决定这样做以保持简单。