Heim > Java > javaLernprogramm > Hauptteil

Übergibt Java Objekte nach Wert oder Referenz?

Barbara Streisand
Freigeben: 2024-11-21 06:14:10
Original
410 Leute haben es durchsucht

Does Java Pass Objects by Value or Reference?

Java: Wertübergabe vs. Referenzübergabe

In Java kommt es häufig zu Missverständnissen hinsichtlich der Objektübergabemechanismen. Dieser Artikel befasst sich mit der Unterscheidung zwischen zwei Codeausschnitten und beleuchtet die Grundprinzipien des Parameterübergabeverhaltens von Java.

Code A vs. Code B

Code A:

Foo myFoo;
myFoo = createfoo();

public Foo createFoo() {
   Foo foo = new Foo();
   return foo;
}
Nach dem Login kopieren

Code B:

Foo myFoo;
createFoo(myFoo);

public void createFoo(Foo foo) {
   Foo f = new Foo();
   foo = f;
}
Nach dem Login kopieren

Die Parameterübergabe von Java verstehen

Entgegen der landläufigen Meinung verwendet Java die Übergabe von Werten, nicht die Übergabe von Werten durch Verweis. Das bedeutet, dass, wenn ein Objekt als Argument übergeben wird, eine Kopie seiner Referenz erstellt wird und nicht eine direkte Referenz auf das Original.

Code A Erklärung

In der ersten Zeile ist myFoo deklariert, aber nicht zugewiesen. Die zweite Zeile ruft die Methode createFoo auf, die ein neues Foo-Objekt zurückgibt, das myFoo zugewiesen ist. Diese Zuweisung erstellt ein neues Objekt, das sich von dem innerhalb der Methode erstellten unterscheidet.

Code B-Erklärung

Im Gegensatz dazu übergibt Code B die myFoo-Referenz als Argument an die Methode createFoo. Innerhalb der Methode wird ein neues Foo-Objekt erstellt und dem foo-Parameter zugewiesen. Anschließend wird foo a zugewiesen, einer lokalen Variablen innerhalb der Methode. Durch diese Neuzuweisung wird effektiv die lokale Referenz foo geändert, nicht die ursprüngliche Referenz myFoo.

Beispiel für Klarheit

Um die Konzepte zu veranschaulichen, betrachten Sie die folgende Klasse:

public class Foo {
   private String attribute;

   public void setAttribute(String attribute) {
      this.attribute = attribute;
   }
}
Nach dem Login kopieren

Hauptklasse:

public class Main {
   public static void main(String[] args) {
      Foo f = new Foo("f");
      changeReference(f); // Attempt to change reference
      modifyReference(f); // Attempt to modify object attribute
   }

   public static void changeReference(Foo a) {
      Foo b = new Foo("b");
      a = b;
   }

   public static void modifyReference(Foo c) {
      c.setAttribute("c");
   }
}
Nach dem Login kopieren

Nachdem die Hauptmethode eine Instanz von Foo erstellt und f zugewiesen hat, ruft sie changeReference auf, das versucht, die Referenz einem anderen Objekt neu zuzuweisen. Dies ändert jedoch nichts an der f-Referenz.

Im Gegensatz dazu ändert modifyReference das Attribut des von c referenzierten Objekts, bei dem es sich um dasselbe Objekt wie f handelt. Dies zeigt, dass die Referenzübergabe eine Kopie der Referenz und nicht des Objekts selbst erstellt.

Schlussfolgerung

Javas Ansatz zur Wertübergabe stellt die Unveränderlichkeit von Objekten sicher, indem Originalobjekte vor unbeabsichtigten Änderungen außerhalb ihres Gültigkeitsbereichs geschützt werden. Dieses Prinzip fördert die Kapselung und erleichtert die Erstellung von robustem und vorhersehbarem Code.

Das obige ist der detaillierte Inhalt vonÜbergibt Java Objekte nach Wert oder Referenz?. 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