Heim >Java >javaLernprogramm >Übergibt Java Objekte nach Wert oder nach Referenz?
Javas Unterscheidung zwischen „Pass by Value“ und „Pass by Reference“
In Java speichern Variablen Referenzen auf Objekte, nicht auf die Objekte selbst. Diese Unterscheidung wirkt sich darauf aus, wie Objekte als Argumente an Methoden übergeben werden.
Szenario A: Übergabe einer Referenz
Beachten Sie den folgenden Codeausschnitt:
Foo myFoo; myFoo = createFoo(); public Foo createFoo() { Foo foo = new Foo(); return foo; }
Wenn myFoo das Ergebnis von createFoo() zugewiesen wird, wird ein neues Foo-Objekt erstellt und foo zugewiesen. Die Referenzvariable myFoo zeigt nun auf dieses neue Objekt. Wenn myFoo später geändert wird, wirken sich die Änderungen auf das ursprüngliche Foo-Objekt aus. Wenn myFoo jedoch eine neue Referenzvariable zugewiesen wird, zeigt sie auf ein anderes Objekt.
Szenario B: Übergabe eines Werts
Vergleichen Sie dies mit dem Folgenden:
Foo myFoo; createFoo(myFoo); public void createFoo(Foo foo) { Foo f = new Foo(); foo = f; }
In diesem Fall erhält die Methode createFoo() eine Referenz auf myFoo. Allerdings wird innerhalb der Methode ein neues Foo-Objekt erstellt und einer lokalen Referenzvariablen f zugewiesen. Die Zeile foo = f ändert nur die Referenz innerhalb der Methode, nicht die in der aufrufenden Methode gespeicherte Referenz. Daher werden alle an foo in der Methode vorgenommenen Änderungen nicht im ursprünglichen Foo-Objekt widergespiegelt.
Schlussfolgerung
Anhand dieser Beispiele ist offensichtlich, dass Java immer erfolgreich ist Argumente nach Wert, nicht nach Referenz. Der übergebene Wert ist eine Referenz auf das Objekt, nicht das Objekt selbst. Folglich wirken sich Änderungen an Referenzvariablen innerhalb von Methoden nicht auf die ursprünglichen Objekte aus. Änderungen, die durch die Referenz am Objekt selbst vorgenommen werden, werden jedoch im Originalobjekt widergespiegelt.
Das obige ist der detaillierte Inhalt vonÜbergibt Java Objekte nach Wert oder nach Referenz?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!