return の値はその時点で決まる
出力はどれか。
public class Main {
static int f() {
int x = 1;
try {
return x;
} finally {
x = 100;
}
}
public static void main(String[] args) {
System.out.println(f());
}
}
- A
1 - B
100 - C コンパイルエラーになる
- D
101
正解と解説を見る
正解: A
- A: return x の時点で戻り値 1 が決まります。その後 finally で x を変えても戻り値は変わりません。
- B: finally で x = 100 にしても、すでに決まった戻り値 (1) は変わりません。
- C: try-finally で return する書き方は問題なくコンパイルできます。
- D: 101 になる計算はありません。
ポイント
return x;の時点で返す値 (1) が決まります。その後 finally で x を変えても、戻り値は変わりません。