Java 使用新的(整数)与整数

Java 使用新的(整数)与整数,java,Java,在我的Java课程中,教授使用了如下内容: integerBox.add(new Integer(10)); 这是否等同于仅仅做: integerBox.add(10); ?? 我在谷歌上搜索了一下,但找不到一种或另一种方法,教授也含糊其辞。 我能找到的最贴切的解释是: 整数是一个数字;整数是可以引用 包含数字的对象 相当于 integerBox.add(Integer.valueOf(10)); 因此它可能返回整数实例 了解设置自动装箱缓存大小的各种方法 另请参见:基本上,Java集合类

在我的Java课程中,教授使用了如下内容:

integerBox.add(new Integer(10));
这是否等同于仅仅做:

integerBox.add(10);
?? 我在谷歌上搜索了一下,但找不到一种或另一种方法,教授也含糊其辞。 我能找到的最贴切的解释是:

整数是一个数字;整数是可以引用 包含数字的对象

相当于

integerBox.add(Integer.valueOf(10));
因此它可能返回整数实例

了解设置自动装箱缓存大小的各种方法


另请参见:

基本上,Java集合类,如
Vector
ArrayList
HashMap
,等等。不要采用原始类型,如
int

在过去(Java 5之前),您不能这样做:

List myList = new ArrayList();
myList.add(10);
您必须这样做:

List myList = new ArrayList();
myList.add(new Integer(10));
这是因为
10
本身就是一个
int
Integer
是一个类,它包装了
int
原语,生成一个
new Integer()
意味着您正在生成一个类型为
Integer
的对象。在自动装箱出现之前,您不能像这里那样混合使用
Integer
int

因此,外卖是:

integerBox.add(10)
integerBox.add(新整数(10))
将导致一个
Integer
被添加到
integerBox
,但这只是因为
integerBox.add(10)
透明地为您创建
整数。这两种方法不一定以相同的方式创建
整数
,因为其中一种方法是使用
新整数
显式创建的,而自动装箱将使用
Integer.valueOf()
。我假设教程中的
integerBox
是某种类型的集合(它接受对象,而不是原语)

但从这个角度来看:

int myInt = 10;
Integer myInteger = new Integer(10);

一个是基元,另一个是类型为
Integer

的对象。在本例中,是。我假设integerBox是一个对象的集合-您只能在integerBox中存储对象。这意味着您在集合中不能有基本值,例如int

然而,Java5发布后,出现了一种称为自动装箱的东西。自动装箱是将原语值自动转换为对象的过程。这是通过其中一个包装类完成的——Integer、Double、Character等(所有包装类都用大写字母命名,并且名称与它们所表示的原语值有关)


当您将int 10添加到集合(最有可能是ArrayList)时,Java虚拟机会在幕后将其转换为Integer类型的对象。

什么是
integerBox
?此外,使用Java,您可以透明地混合常规原语
int
Integer
类实例。在这种情况下,我在这里遵循泛型教程:我看到了这一行,并记住了类中类似的内容。“…教授很模糊”。或者,你不理解他对你说的话。这对这个特定的项目有效。但是这两者之间有实际的区别吗?如果我理解正确,使用.add(Integer(10))创建一个Integer对象,该对象包含一个值为10的int。如果我只是写一个.add(10),我只会创建一个值为10的int,而不是一个object。因此,建议在“新整数(foo)”上方始终使用Integer.valueOf(foo)。让我惊讶的是,这是在泛型教程中出现的。@Jeremy:这取决于“add”是需要“int”还是“Integer”。如果它需要一个整数,而您给它传递了一个值为10的int,Java将自动为您执行“Integer.valueof(10)”来“autobox”int,以将int转换为整数。@arnot,那么最终结果是一样的吗?如果是这样的话,写Integer.valueof(Foo)和just Foo是否仍然是一种更好的做法?@Jeremy-use
Foo
,自动装箱将为您解决这个问题。使用显式
Integer.valueOf(foo)
的唯一真正原因是,如果您使用的是旧的Java.Downvote,因为“so takeaway is”部分下的段落是错误的。integerBox.add(10)并不等同于integerBox.add(newinteger(10))-一个人总是创建一个整数,但并不总是(通常也不会)创建一个整数。
int myInt = 10;
Integer myInteger = new Integer(10);