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

der*_*dji 2 java arrays integer object

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

Syn*_*tic 9

是的,是的.

你实际上不能把它int变成一个Object[].你正在做的是利用称为autoboxing的Java特性,其中类似的原始类型intInteger在必要时自动提升到相应的包装类(在这种情况下),反之亦然.

你可以在这里阅读更多相关信息.

编辑:

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

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

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