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/