Heim > Java > javaLernprogramm > Warum wirkt sich das Ändern einer Variablen in einem Final-Block nicht auf den zurückgegebenen Wert aus?

Warum wirkt sich das Ändern einer Variablen in einem Final-Block nicht auf den zurückgegebenen Wert aus?

Barbara Streisand
Freigeben: 2024-11-16 17:02:03
Original
865 Leute haben es durchsucht

Why Does Modifying a Variable in a Finally Block Not Affect the Returned Value?

Warum wirkt sich das Ändern einer Variablen in einem Finally-Block nicht auf den zurückgegebenen Wert aus?

Java stellt die try-finally-Anweisung mit dem Code bereit im „finally“-Block wird immer ausgeführt, unabhängig davon, ob der try-Block normal oder abrupt abgeschlossen wird. Dieses Verhalten kann jedoch zu unerwarteten Ergebnissen führen, wenn eine Variable im „finally“-Block geändert wird, nachdem eine „return“-Anweisung im „try“-Block ausgeführt wurde.

Um dieses Konzept zu veranschaulichen, betrachten Sie die folgende Java-Klasse:

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());
    }
}
Nach dem Login kopieren

In diesem Beispiel gibt die foo-Methode die Zeichenfolge „dev“ im try-Block zurück. Der „finally“-Block ändert jedoch die Variable „s“ in „Variable s überschreiben“ und gibt eine Meldung aus, die angibt, dass sie ausgeführt wurde.

Überraschenderweise lautet die Ausgabe dieses Codes:

Entry in finally Block
dev
Nach dem Login kopieren

Dieses Ergebnis mag kontraintuitiv erscheinen, da wir erwarten würden, dass der Wert von s „Variable s überschreiben“ ist, nachdem der „finally“-Block ausgeführt wurde. Dies ist jedoch nicht der Fall, weil:

  • Die return-Anweisung im try-Block schließt die Ausführung des Blocks ab und gibt sofort den Wert von s zu diesem Zeitpunkt zurück.
  • Beliebig Änderungen an der s-Variablen im final-Block erfolgen, nachdem die return-Anweisung ausgeführt wurde. Daher bleibt der zurückgegebene Wert von s „dev“, auch wenn er vom „finally“-Block geändert wurde.

Es ist wichtig zu beachten, dass dieses Verhalten nur für Änderungen am Wert der s-Variablen selbst gilt. Wenn die s-Variable ein Verweis auf ein veränderliches Objekt ist, werden Änderungen am Inhalt dieses Objekts, die im „finally“-Block vorgenommen werden, im zurückgegebenen Wert widergespiegelt.

Diese ausführliche Erklärung verdeutlicht, warum eine Variable in einem „finally“-Block geändert werden sollte ändert den Rückgabewert einer Methode nicht, auch wenn der „finally“-Block immer ausgeführt wird.

Das obige ist der detaillierte Inhalt vonWarum wirkt sich das Ändern einer Variablen in einem Final-Block nicht auf den zurückgegebenen Wert aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage