for 文の変数のスコープ
このコードを実行するとどうなるか。
public class Main {
public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
}
for (int i = 10; i < 12; i++) {
System.out.print(i);
}
}
}
- A
1011と出力される - B
012と出力される - C 実行時に例外が発生する
- D コンパイルエラーになる
正解と解説を見る
正解: A
- A: 1つ目の for を抜けると i は無くなるので、2つ目の for で同じ名前を宣言でき、10 と 11 が出力されます。
- B: 1つ目の for は何も出力しません。出力するのは2つ目の for で、i は 10 から始まります。
- C: どちらの for も範囲内で終わるので、例外にはなりません。
- D: for の変数のスコープはその for の中だけなので、同じ名前を別の for で宣言できます。
ポイント
- for の初期化式で宣言した変数は、その for 文の中だけで有効です。
- 1つ目の for を抜けると i は無くなるので、2つ目の for で同じ名前を宣言できます。