5

これはオートボクシングですか?

Object ob = 8;

上記のコードは、最初に int リテラル 8 を Integer でラップし、次にその参照を変数 ob に割り当てますか? Java 言語仕様には、このケースについて何も記載されていないためです。

4

2 に答える 2

13

上記のコードは、最初に int リテラル 8 を Integer でラップし、次にその参照を変数 ob に割り当てますか?

はい。(むしろ、int値をIntegerオブジェクトにボックス化し、変数 への参照を割り当てます。整数値がリテラルであるという事実は、ここでは実際には無関係です。たとえば、 をob返すメソッド呼び出しである可能性があります。)int

Java 言語仕様には、このケースについて何も記載されていないためです。

それは真実ではない。つまり、への代入を明示的に処理するわけではありませんObjectが、通常の変換と同じように機能します。

仕様のセクション 5.1.7はボックス化を扱っており、これは... に変換intされ、変数への参照の代入は通常の参照変換です。IntegerIntegerObject

于 2013-02-28T15:19:36.513 に答える
7

この特定のケースは、割り当ての変換で詳しく説明されています。

代入変換は、式の値が変数に割り当てられたときに発生します(§15.26)。式の型を変数の型に変換する必要があります。
割り当てコンテキストでは、次のいずれかを使用できます。

  • [...]
  • ボクシングの変換とそれに続く拡大参照変換

だからあなたの場合:

8 (int) === boxing ===> 8 (Integer) ==== reference widening ===> 8 (Object)
于 2013-02-28T15:21:49.877 に答える