java - 将 int 放入对象数组后,我得到的是 Integer 还是 int ?

标签 java arrays object integer

Would (1) int a; new Object[] {a} 与 (2) new Object[] {new Integer(a)} 相同吗? 如果我执行第一个操作,(new Object[]{a})[0] 会给我一个 Integer 吗? 谢谢

最佳答案

是的,是的。

您实际上无法将 int 放入 Object[] 中。您正在做的是利用 Java 的一项称为“自动装箱”的功能,其中像 int 这样的基本类型会自动提升为其相应的包装类 (Integer 在这种情况下),或在必要时反之亦然。

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

编辑:

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

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

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

关于java - 将 int 放入对象数组后,我得到的是 Integer 还是 int ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2859708/

相关文章:

php - 数组中的多个追加 - PHP

arrays - Postgresql - 数组中对象的 json 更新键

javascript - 如何在javascript中打印对象的所有属性?

java - 使用 DB 开发 Java 的最佳方式

javascript - 如何在二维中表示已用空间?

java - TextView 椭圆在 setText() 上消失

oop - 在源或包的顶层声明对象表达式的范围是什么?

javascript - 通过属性 javascript 连接对象数组

javascript - 如何从通过 Selenium 提供的 html 中提取动态文本 3204255?

java - Android 和 AppEngine 网络服务 : Json. .. RPC、REST... Protocol Buffer ?