同じスコープで同じ名前を宣言
このコードを実行するとどうなるか。
public class Main {
public static void main(String[] args) {
int x = 1;
{
int x = 2;
System.out.println(x);
}
}
}
- A
2と出力される - B
1と出力される - C 実行時に例外が発生する
- D コンパイルエラーになる
正解と解説を見る
正解: D
- A: 実行まで進まないので、何も出力されません。
- B: 実行まで進まないので、何も出力されません。
- C: スコープの誤りはコンパイル時に見つかります。
- D: 外側の x が有効な範囲の中で、同じ名前の x をもう一度宣言することはできません。
ポイント
- ローカル変数が使える範囲の中で、同じ名前のローカル変数をもう一度宣言することはできません。内側のブロックでも同じです。
- 一方、ブロックを抜けた後なら同じ名前で宣言し直せます。