将int放入对象数组后,我得到一个Integer或int吗?

时间:2010-05-18 17:54:01

标签: java arrays object integer

(1)int a; new Object[] {a}是否与(2)new Object[] {new Integer(a)}相同? 如果我做第一个,(new Object[]{a})[0]会给我一个Integer吗? 谢谢

2 个答案:

答案 0 :(得分:9)

是的,是的。

您实际上无法将int放入Object[]。您正在做的是使用称为 autoboxing 的Java功能,其中像int这样的原始类型会自动提升到其对应的包装类(在这种情况下为Integer必要时反之亦然。

您可以阅读有关此here的更多信息。

修改

正如Jesper在下面的评论中指出的那样,你的第一个问题的答案实际上不是“是”,而是“它取决于a的价值”。像在(2)中那样调用构造函数Integer(int)始终导致创建一个新的Integer对象并将其放入数组中。

然而,在(1)中,自动装箱过程不会使用此构造函数;它基本上会调用Integer.valueOf(a)。这个可以创建一个新的Integer对象,或者可以返回一个预先存在的缓存Integer对象,以节省时间和/或内存,具体取决于关于a的价值。特别是,-128和127之间的值以这种方式缓存。

在大多数情况下,这不会产生显着差异,因为Integer对象是不可变的。如果要创建大量Integer个对象(远远超过256个)并且大多数在-128到127之间,那么您的示例(1)可能会更快并且使用的内存更少( 2)。

答案 1 :(得分:0)

Java编译器添加了类似Integer.valueOf(a)的代码,以便将int值转换为Object。