Heim >Backend-Entwicklung >C++ >Übergibt Java Parameter als Referenz oder als Wert?

Übergibt Java Parameter als Referenz oder als Wert?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-30 14:45:16447Durchsuche

Does Java Pass Parameters by Reference or by Value?

Ü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!

Stellungnahme:
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