AI作成・AIで再検証済(有資格者監修なし)1Z0-815-JPN 対応
代入演算子(単純代入・複合代入・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
✓ 正解:A・CAI作成・AIで再検証済

解説

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

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

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

各誤答が違う理由
  • B単純代入 = には複合代入のような暗黙キャストが働かない。x + 3.5 は double であり、明示キャスト無しで 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が作成し、別の手順のAIで誤りを点検した解説です(有資格者による監修は経ていません)

この問題集の作り方

  1. 問題と解説はAIが作成しています。この資格の問題に、有資格者(著者)の監修は入っていません。
  2. 各問に、公式ドキュメントの出典リンクを付けています。書いてあることは、出典に当たって確かめられます。
  3. 誤答の選択肢それぞれに、なぜ誤りなのかの理由を書いています。
  4. 誤りを見つけたら報告できます。原則として無償で訂正・削除します。
  5. 各試験の運営団体とは無関係の非公式教材です。合格を保証するものではありません。
この分野をもっと解いて、得点源に
演算子 を含む問題を分野別に演習できます。
演習する →