AI作成・独立検証済(有資格者監修なし)1Z0-815 対応
プリミティブ型(char の算術演算と結果の暗黙拡大)難易度 高無料

次のコードのコンパイル結果として正しいものを選べ。

1  public class Q15 {
2      public static void main(String[] args) {
3          char c = 'A';
4          c = c + 1;
5          System.out.println(c);
6      }
7  }
  1. Aコンパイルエラー(c + 1 の結果は int になり char へキャスト無しで代入できない)
  2. Bコンパイル成功・実行して B と出力される
  3. Cコンパイル成功・実行して 66(文字コードの数値)と出力される
  4. Dコンパイルエラー(char 型は算術演算子 + に使用できない)
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済

解説

char は文字コードを保持する16ビットの符号無し整数型で、算術演算子(+ など)に使うと int に二項数値昇格(binary numeric promotion)される

c + 1charint の演算であり、結果の型はint になる(値としては 'A' の文字コード65に1を足した66)。

4行目 c = c + 1;int 型の式を char 型の変数へキャスト無しで代入しようとしており、これは縮小変換にあたるためコンパイルエラーになる。 正しく書くには c = (char) (c + 1);(明示キャスト)または c += 1;(複合代入演算子には暗黙のキャストが組み込まれている)を使う。

各誤答が違う理由
  • Bc + 1 の演算結果は int に昇格するため、キャスト無しの代入 c = c + 1; はコンパイルエラーになる。実行までは到達しない。
  • Cそもそもコンパイルが通らない。仮に通ったとしても char 変数の println は文字として出力され、数値としては出力されない。
  • Dchar は数値型として算術演算に使用できる(文字コードとして加減算可能)。エラーの原因は演算自体ではなく、その結果(int)を char へキャスト無しで代入しようとした点。
ひっかけ:char に対する + 1 はそのまま char のままだろう」という思い込みが罠。算術演算の結果は int に昇格するため、単純代入 c = c + 1; はコンパイルエラーになる一方、c += 1; は複合代入演算子が暗黙に (char) キャストを行うためコンパイルが通るという非対称性が試験の定番の狙い目。
コマンド例と想定される挙動(未実行)
javac でコンパイル:
Q15.java:4: error: incompatible types: possible lossy conversion from int to char
        c = c + 1;
              ^
→ コンパイル不成立(実行に至らない)。
公式ドキュメント・関連JLS SE11 §5.6.2 Binary Numeric Promotion
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)
この分野をもっと解いて、得点源に
データ型 を含む問題を分野別に演習できます。
演習する →