Java-Parameterübergabe: Wert vs. Referenz
In Java unterscheidet sich die Semantik der Parameterübergabe von Sprachen wie C#, wo das Schlüsselwort „ref“ verwendet wird Zeigt explizit die Referenzübergabe an.
Verwirrung um die Referenz herum Übergabe
Javas „Wertübergabe“-Natur verwirrt Entwickler, da Parameter von Referenztypen (wie Objekte) tatsächlich per Referenz übergeben werden. Diese „Referenz“ ist jedoch lediglich der Speicherort des Objekts, nicht das Objekt selbst.
Demonstration der Wertübergabe
Bedenken Sie den folgenden Codeausschnitt:
Object o = "Hello"; mutate(o); System.out.println(o); private void mutate(Object o) { o = "Goodbye"; }
Dieser Code gibt „Hallo“ auf der Konsole aus, da der Parameter „o“ in der Mutate-Methode tatsächlich auf eine Kopie des Originals verweist Referenz. Das Zuweisen eines neuen Werts zu dieser Kopie hat keine Auswirkung auf den Wert des Originalobjekts.
Alternative Optionen zur Referenzänderung
Um das Originalobjekt zu ändern, gibt es zwei Möglichkeiten:
AtomicReference<Object> ref = new AtomicReference<Object>("Hello"); mutate(ref); System.out.println(ref.get()); // Goodbye! private void mutate(AtomicReference<Object> ref) { ref.set("Goodbye"); }
Das obige ist der detaillierte Inhalt vonHandelt es sich bei der Parameterübergabe von Java wirklich um eine Wertübergabe oder ist sie nuancierter?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!