質問: 10; return val; } finally { val += 10; } return val; } } ``` この答えは10です。解説には以下の様にあります。 **戻り値のための変数とメソッド内で使用されているvalは違う** 動きをデバッグで確認しました。sample()メソッド内の初めにブレークポイントを置きました。 System.out.println(result)に処理が移る直前まではsample()内の全てのvalの値は20だったのですが、System.out.println(result)に遷移した瞬間から10になります。 なぜでしょうか。
回答: 例外が発生してcatch節に入り、returnが実行された時点で、**メソッドとしての返り値が10で確定します。**それ以降ローカル変数をいくらいじっても、確定した返り値に影響はありません。