public class Main {
public static void main(String[] args) {
int target = 10;
int key = 10;
switch (target) {
case key:
System.out.println("Match");
break;
default:
System.out.println("Default");
}
}
}
選択肢
- あなたの回答
- 正解
正解
C. case ラベルに final でない変数を使用しているため、コンパイルエラーになる
詳細解説
switch 文の case ラベルに指定できる値は、コンパイル時定数(定数式または final 修飾子が付与された初期化済みの変数)でなければなりません。変数 key には final が付与されていないため、コンパイル時定数とみなされず、case ラベルに使用するとコンパイルエラーになります。
なぜ他の選択肢が違うのか
- 変数 key に final が付与されていないため、プログラムはコンパイルエラーになります。
- コンパイル自体が通らないため、default ブロックが実行されることもありません。
- コンパイル段階でエラーが検知されるため、実行時例外は発生しません。
罠ポイント
switch 文の case ラベルには、リテラルまたは final が付与されたコンパイル時定数しか指定できないという制約です。