AI作成・独立検証済(有資格者監修なし)1Z0-815 対応
代入演算子(複合代入演算子の暗黙の縮小変換)難易度 標準無料

次のコードの出力として正しいものを選べ。

1  public class Q4 {
2      public static void main(String[] args) {
3          byte b = 10;
4          b += 5;
5          System.out.println(b);
6      }
7  }
  1. A15
  2. Bコンパイルエラー(int の結果を byte 変数に複合代入できない)
  3. CClassCastException が実行時にスローされる
  4. D5+= は上書き代入として働く)
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済

解説

複合代入演算子 E1 op= E2 は、単なる E1 = E1 op E2 の省略形ではなく、結果を E1 の型へ自動的にキャストし直すという特別な意味を持つ(JLS §15.26.2)。等価な形は次の通り:

E1 = (T) ((E1) op (E2))

ここで TE1byte b)の型。b + 5 は二項数値昇格により int 演算(15)になるが、b += 5 はこれを暗黙に (byte) へキャストしてから b へ代入する。15byte の範囲(-128〜127)に収まるため実行時エラーにもならず、b15 になる。

各誤答が違う理由
  • B複合代入演算子は結果を左辺の型へ暗黙にキャストする特別な意味を持つため、byte += int はコンパイルエラーにならない。エラーになるのは b = b + 5;(単純代入)の場合。
  • C複合代入の暗黙キャストはコンパイル時に組み込まれる縮小変換であり、実行時に例外を投げるものではない(値が範囲外でも例外にはならず単に切り詰められる)。
  • D+= は「加算してから代入」であり単なる上書きではない。b の元の値10に5を加えた15になる。
ひっかけ: もし b = b + 5;(複合代入ではなく単純代入+加算)と書くと、右辺 b + 5int 型になり、コンパイルエラーになる(int から byte への暗黙の縮小変換は変数同士の式では許されない)。+= のような複合代入演算子だけが自動キャストという特別扱いを受ける点が Silver 頻出の引っかけ。
コマンド例と想定される挙動(未実行)
出力:
15
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)
この分野をもっと解いて、得点源に
演算子 を含む問題を分野別に演習できます。
演習する →