是的,是的.
你实际上不能把它int
变成一个Object[]
.你正在做的是利用称为autoboxing的Java特性,其中类似的原始类型int
会Integer
在必要时自动提升到相应的包装类(在这种情况下),反之亦然.
你可以在这里阅读更多相关信息.
编辑:
正如Jesper在下面的评论中指出的那样,你的第一个问题的答案实际上不是"是",而是"它取决于"的价值a
.Integer(int)
像在(2)中那样调用构造函数将始终导致Integer
创建一个新对象并将其放入数组中.
但是,在(1)中,自动装箱过程不会使用此构造函数; 它基本上会打电话Integer.valueOf(a)
.这可以创建一个新Integer
对象,或者它可以返回一个预先存在的缓存Integer
对象以节省时间和/或内存,具体取决于值a
.特别是,-128和127之间的值以这种方式缓存.
在大多数情况下,这不会产生显着差异,因为Integer
对象是不可变的.如果要创建大量Integer
对象(远远超过256个)并且大多数对象在-128到127之间,那么您的示例(1)可能会更快并且使用的内存少于(2).