这是自动装箱吗?
Object ob = 8;
上面的代码是否会先将 int 字面量 8 包装在 Integer 中,然后将其引用分配给变量 ob?因为 java 语言规范对这种情况没有任何规定。
这是自动装箱吗?
Object ob = 8;
上面的代码是否会先将 int 字面量 8 包装在 Integer 中,然后将其引用分配给变量 ob?因为 java 语言规范对这种情况没有任何规定。
上面的代码是否会先将 int 字面量 8 包装在 Integer 中,然后将其引用分配给变量 ob?
是的。(或者更确切地说,它会将int
值装箱到一个Integer
对象中,然后将引用分配给变量ob
。整数值是文字的事实在这里是无关紧要的,真的。它可能是一个返回的方法调用int
,例如。)
因为 java 语言规范对这种情况没有任何规定。
这不是真的。我的意思是,它没有明确处理分配 to Object
,但它的工作方式与正常转换相同。
规范的第 5.1.7 节处理装箱,它将转换int
为Integer
... 然后将Integer
引用分配给Object
变量是正常的引用转换。
分配转换中详细说明了此特定情况:
当将表达式的值(第 15.26 节)分配给变量时,就会发生赋值转换:必须将表达式的类型转换为变量的类型。
赋值上下文允许使用以下之一:
- [...]
- 可选的装箱转换,然后是扩大的参考转换
所以在你的情况下:
8 (int) === boxing ===> 8 (Integer) ==== reference widening ===> 8 (Object)