在为对象分配int时,Java是否会自动装箱?

时间:2013-02-28 15:17:32

标签: java object autoboxing

这是自动装箱吗?

Object ob = 8;

上面的代码首先将int literal 8包装在Integer中,然后将其引用分配给变量ob吗?因为java语言规范在这种情况下没有任何内容。

2 个答案:

答案 0 :(得分:13)

  

上面的代码首先将int literal 8包装在Integer中,然后将其引用分配给变量ob吗?

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

  

因为java语言规范在这种情况下没有任何内容。

那不是真的。我的意思是,它明确地处理分配给Object,但它的工作方式与普通转换相同。

该规范的

Section 5.1.7涉及装箱,它会将int转换为Integer ...然后为Integer变量分配Object引用是正常的参考转换。

答案 1 :(得分:6)

assignment conversions

详细说明了这一具体案例
  

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

     
      
  • [...]
  •   
  • 一个拳击转换,可选地后跟一个加宽的引用转换
  •   

所以在你的情况下:

8 (int) === boxing ===> 8 (Integer) ==== reference widening ===> 8 (Object)