Heim >Backend-Entwicklung >C++ >Übergibt Java Parameter als Referenz oder als Wert?
Übergabe von Parametern per Referenz in Java
In Java wird jeder Parameter als Wert übergeben, was möglicherweise nicht intuitiv erscheint, insbesondere wenn Sie es sind stammen aus Sprachen wie C#, die Pass-by-Reference unterstützen. Allerdings ist die Semantik unter der Haube etwas anders.
Wie Java mit Referenztypen umgeht
Für Parameter des Referenztyps (z. B. Objekte) übergibt Java die Referenz sich selbst nach Wert. Daher scheint es sich um eine Referenzübergabe zu handeln, da sich Zuweisungen innerhalb der Methode auf die Referenz außerhalb der Methode auswirken.
Es ist jedoch wichtig zu beachten, dass die übergebene Referenz nicht mit der in der Methode verwendeten Referenz übereinstimmt aufrufende Methode.
Beweis des Pass-by-Value
Bedenken Sie Folgendes Beispiel:
Object o = "Hello"; mutate(o); System.out.println(o); private void mutate(Object o) { o = "Goodbye"; } //NOT THE SAME o!
Dieser Code gibt „Hello“ auf der Konsole aus, obwohl die mutate()-Methode versucht, den o-Verweis in „Goodbye“ zu ändern. Dies zeigt, dass die an mutate() übergebene Referenz nicht mit der ursprünglichen o-Referenz übereinstimmt, was die Pass-by-Value-Semantik unterstützt.
Optionen für die Übergabe echter Referenzen
Um echtes Pass-by-Reference-Verhalten zu erreichen, können Sie den folgenden Ansatz verwenden:
AtomicReference<Object> ref = new AtomicReference<Object>("Hello"); mutate(ref); System.out.println(ref.get()); //Goodbye! private void mutate(AtomicReference<Object> ref) { ref.set("Goodbye"); }
In diesem Fall stellt die AtomicReference ein Wrapper um das Objekt, und seine Referenz wird tatsächlich als Wert übergeben. Zuweisungen an die Referenz innerhalb von mutate() wirken sich auf die Referenz außerhalb der Methode aus, was zum gewünschten Pass-by-Reference-Verhalten führt.
Das obige ist der detaillierte Inhalt vonÜbergibt Java Parameter als Referenz oder als Wert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!