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

时间:2012-12-04 11:25:37

标签: java wrapper

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

6 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:2)

在java中称为auto-boxing

  

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

Link

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

这是java 1.5引入的java语言功能。它被称为 autoboxing

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

因此,在幕后,当您添加Integer时,int的实例会添加到列表中。

答案 5 :(得分:0)

请阅读有关参考类型和值类型的更多信息,以便更好地理解这一点。

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

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

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

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

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