戻り値が変更されない理由
try-finally ステートメントでは、try ブロックの実行は return ステートメントの実行で終了します。この時点で、メソッドによって返される変数 s の値は、return ステートメントが実行された時点の s の値です。
finally 句が後で s の値を変更しても、変更は行われません。 return ステートメントがすでに実行された後は、メソッドの戻り値を変更しないでください。
不変オブジェクトと可変オブジェクト
この動作は、の値を直接変更するときに適用されることに注意することが重要です。それ自体はfinallyブロック内にあります。ただし、 s が変更可能なオブジェクト (String は参照しない) を参照していた場合、finally ブロック内でオブジェクトの内容を変更すると、戻り値に反映されます。 > Java 言語仕様 (JLS) のセクション 14.20.2 に、これらの操作に関する詳細なガイドラインが記載されています。このセクションでは、try ブロック内の return ステートメントが突然終了を構成すると述べています。したがって、セクション 14.17 では、return ステートメントがブロックの実行を突然終了することについて説明しています。
例外処理と Return ステートメント
return により try ブロックとfinally ブロックの両方が突然終了した場合
例外のスロー以外の理由で try ブロックが突然終了した場合、finally ブロックが実行されます。その後、try ステートメントは同じ理由で突然完了します。
finally ブロックが理由 S で突然終了した場合、try ステートメントは理由 S で突然完了し、元の理由は破棄されます。以上がFinally ブロックの Return ステートメントが Try ブロックの戻り値をオーバーライドするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。