5

这是自动装箱吗?

Object ob = 8;

上面的代码是否会先将 int 字面量 8 包装在 Integer 中,然后将其引用分配给变量 ob?因为 java 语言规范对这种情况没有任何规定。

4

2 回答 2

13

上面的代码是否会先将 int 字面量 8 包装在 Integer 中,然后将其引用分配给变量 ob?

是的。(或者更确切地说,它会将int值装箱到一个Integer对象中,然后将引用分配给变量ob。整数值是文字的事实在这里是无关紧要的,真的。它可能是一个返回的方法调用int,例如。)

因为 java 语言规范对这种情况没有任何规定。

这不是真的。我的意思是,它没有明确处理分配 to Object,但它的工作方式与正常转换相同。

规范的第 5.1.7 节处理装箱,它将转换intInteger... 然后将Integer引用分配给Object变量是正常的引用转换。

于 2013-02-28T15:19:36.513 回答
7

分配转换中详细说明了此特定情况:

当将表达式的值(第 15.26 节)分配给变量时,就会发生赋值转换:必须将表达式的类型转换为变量的类型。
赋值上下文允许使用以下之一:

  • [...]
  • 可选的装箱转换,然后是扩大的参考转换

所以在你的情况下:

8 (int) === boxing ===> 8 (Integer) ==== reference widening ===> 8 (Object)
于 2013-02-28T15:21:49.877 回答