Why is int changed to Integer automatically in java?
为什么在Java中将原始类型INT放置到ARAYLIST中时,基元类型int自动变为对象整数?
有关详细信息,请参阅以下链接:http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html
它在Java中被称为EDCOX1×3。
As any Java programmer knows, you can’t put an int (or other primitive value) into a collection. Collections can only hold object references, so you have to box primitive values into the appropriate wrapper class (which is Integer in the case of int). When you take the object out of the collection, you get the Integer that you put in; if you need an int, you must unbox the Integer using the intValue method. All of this boxing and unboxing is a pain, and clutters up your code. The autoboxing and unboxing feature automates the process, eliminating the pain and the clutter.
链接
自动修改发生在集合只能容纳对象而不能容纳基元的情况下。如果您需要一个int原语,那么在您读取它时,您必须用intValue()方法将它取消绑定。
ArrayList只能存储对象。int是一个基元数据类型,因此它被"自动装箱"为对象等价物。这只发生在Java 5之前,您必须自己装入整数。
请阅读有关引用类型和值类型的更多信息,以便更好地理解这一点。
arraylist只保存对对象的引用。它不保存值本身。
由于int是值类型,因此它没有引用。当您将int转换为整数时,您将在内存中为一个包含int值的整数创建一些空间,并为您创建的整数对象创建一个引用。
现在,arraylist只保存整数对象的地址,而不保留整数本身。
这样想:数组列表中的一个元素占用内存块:200。整数对象在内存块400中。在内存块200中,不保留整数的值,而是保留内存地址400。
原因,我不知道。我想他们只是决定这样做,以保持简单。
这是用Java 1.5引入的Java语言特性。这叫做自动氧化。
粗略地讲,它将Java原始类型转换为相应的包装类类型。编译器检测何时需要(并且可能需要)收件箱(原语到包装器)或溢出(包装器到原语),并将表达式扩展为正确的字节代码。
因此,在幕后,当您添加一个