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