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

这是自动装箱吗?

Object ob = 8; 

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

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

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

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

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

规范的第5.1.7节涉及装箱,它将int转换为Integer …然后将一个Integer引用分配给一个Object变量是一个正常的引用转换。

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

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

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

所以在你的情况下:

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