AI作成・独立検証済(有資格者監修なし)1Z0-815 対応
代入演算子(単純代入・複合代入・final再代入のコンパイル可否)難易度 標準無料

次の4つの独立したコードスニペットのうち、コンパイルが通るものをすべて選べ(複数選択)

  1. Aint x = 10; x += 3.5; System.out.println(x);
  2. Bint x = 10; x = x + 3.5; System.out.println(x);
  3. Cbyte b = 10; b++; System.out.println(b);
  4. Dfinal int y = 5; y = 6; System.out.println(y);
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済

解説

代入演算子まわりのコンパイル可否は「暗黙の縮小変換が許される場面か」と「final 変数への再代入か」で決まる。

  • A:x += 3.5; は複合代入演算子。x = (int)(x + 3.5) と等価に暗黙キャストされるためコンパイルが通るx(int)13.5 = 13)。
  • B:x = x + 3.5; は単純代入。右辺 x + 3.5double になり、それを int 変数へ明示キャスト無しで代入しようとするためコンパイルエラーdoubleint の暗黙の縮小変換は不可)。
  • C:b++; は増分演算子。複合代入と同様に暗黙キャストが働くため byte に対してもコンパイルが通る
  • D:final 変数への再代入はコンパイルエラーfinal は「一度だけ代入可・以後変更不可」を意味する)。

コンパイルが通るのは A と C

各誤答が違う理由
  • B単純代入 = には複合代入のような暗黙キャストが働かない。x + 3.5double であり、明示キャスト無しで int 変数へは代入できずコンパイルエラーになる。
  • Dfinal 修飾された変数は一度初期化されると再代入できない。y = 6; の時点でコンパイルエラーになる。
ひっかけ: 複合代入演算子(+= 等)や増分・減分演算子(++--)は暗黙の縮小キャストという特別扱いを受けるが、単純代入(=)にはその特別扱いが無い、という非対称性が最大の引っかけ。
コマンド例と想定される挙動(未実行)
検証:
A) int x=10; x+=3.5; → コンパイル可・x=13
B) int x=10; x=x+3.5; → コンパイルエラー(incompatible types: possible lossy conversion from double to int)
C) byte b=10; b++;   → コンパイル可・b=11
D) final int y=5; y=6; → コンパイルエラー(cannot assign a value to final variable y)
公式ドキュメント・関連JLS SE11 §15.26 Assignment Operators
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)
この分野をもっと解いて、得点源に
演算子 を含む問題を分野別に演習できます。
演習する →