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