Finally ブロックで変数を変更しても戻り値に影響しないのはなぜですか?
Java には try-finally ステートメントが用意されています。 try ブロックが正常に完了したか突然完了したかに関係なく、finally ブロック内の は常に実行されます。ただし、この動作は、try ブロックで return ステートメントが実行された後、finally ブロックで変数が変更されると、予期しない結果を引き起こす可能性があります。
この概念を説明するために、次の Java クラスを考えてみましょう。
public class Test { private String s; public String foo() { try { s = "dev"; return s; // Return the value of s } finally { s = "override variable s"; System.out.println("Entry in finally Block"); } } public static void main(String[] xyz) { Test obj = new Test(); System.out.println(obj.foo()); } }
この例では、foo メソッドは try ブロックで文字列「dev」を返します。ただし、finally ブロックは s 変数を「変数 s をオーバーライド」するように変更し、それが実行されたことを示すメッセージを出力します。
驚くべきことに、このコードの出力は次のようになります。
Entry in finally Block dev
この結果は直観に反しているように見えるかもしれません。なぜなら、finally ブロックの実行後に s の値が「変数 s をオーバーライドする」と予想されるからです。ただし、これは当てはまりません。
この動作は、s 変数自体の値の変更にのみ適用されることに注意することが重要です。 s 変数が変更可能なオブジェクトへの参照である場合、finally ブロックで行われたそのオブジェクトの内容への変更は、戻り値に反映されます。
この詳細な説明では、finally ブロックで変数を変更する理由が明確になります。 finally ブロックが常に実行される場合でも、メソッドの戻り値は変更されません。
以上がFinally ブロック内の変数を変更しても戻り値に影響しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。