2012-12-04 27 views

回答

2

这就是所谓的在java中auto-boxing

正如任何Java程序员所知道的,您不能将int(或其他原始值)放入集合中。集合只能保存对象引用,所以你必须将原始值装入适当的包装类(在int情况下为Integer)。当你把对象从集合中取出时,你得到了你放入的Integer;如果您需要int,则必须使用intValue方法取消Integer。所有这些拳击和拆箱都是一件痛苦的事情,并且会让你的代码混乱不堪。自动装箱和取消装箱功能可自动执行此过程,消除疼痛和混乱。

Link

1

ArrayList中只能存储对象。 int是一个原始数据类型,因此它对对象的等价物是“自动装箱”的。这只发生在Java 5之前,你必须自己填写Integer。

1

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

0

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

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

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

0

请阅读有关引用类型和值类型的更多信息以更好地理解此内容。

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

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

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

认为它是这样的:在你的ArrayList 一个元件占用的内存块:200 你的Integer对象是存储块中:400。 在内存块200中,不是保留整数的值,而是保持内存地址为400.

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

相关问题