3 Stimmen

Zuweisung von Objekten in Java

Ich habe Code wie diesen:

this.elements = elements;

Wo elements eine List ist. Wird die Liste kopiert oder wird nur ein Zeigerkopie erstellt und beide werden dieselbe Liste repräsentieren?

13voto

Stephan Punkte 39870

Es handelt sich um einen weiteren Verweis und beide repräsentieren dieselbe Liste. In Java ist die Vorstellung von Zeiger für den Programmierer verborgen. Nur die JVM beschäftigt sich mit den Zeigern.

5voto

Eliseo Soto Punkte 1192

Sowohl this.elements als auch elements sind nur Bezeichner für dieselbe Liste, sie wird nicht kopiert

2voto

Jesus Ramos Punkte 22582

Beide werden die gleiche Liste darstellen, alle Objekte in Java sind Referenzen und werden als solche übergeben, daher wird eine Änderung an einem Objekt über die Referenz weitergeleitet.

0voto

Wie andere bereits gesagt haben, wird nur die Referenz kopiert. Wenn Sie die tatsächliche Liste kopieren möchten, müssen Sie die clone() Methode aufrufen:

this.elements = elements.clone();

Hinweis: ob dies den gewünschten Effekt hat oder nicht, hängt immer noch davon ab, was die Objekte in der Liste sind, da sie selbst Referenzen auf veränderbare Objekte sein können.

0voto

Greg Mattes Punkte 31690

Es handelt sich im Wesentlichen um eine "Zeigerkopie." Die richtige Bezeichnung in Java ist Referenz, nicht Zeiger. Ein wesentlicher Unterschied besteht darin, dass der Wert einer Java-Referenz keine Speicheradresse ist, sondern direkt auf ein Objekt im JVM-Heap zeigt.

Wenn Sie eine Kopie möchten, haben Sie mehrere Möglichkeiten, aber die beste ist wahrscheinlich:

this.elements = ImmutableList.copyOf(elements);

Bei dieser Technik wird Google Guava verwendet, um eine Liste zu erstellen, die nicht geändert werden kann. Wenn Sie eine Liste möchten, die Sie ändern können, tun Sie stattdessen dies:

this.elements = Lists.newArrayList(elements);

Es gibt auch die "eingebaute" clone()-Methode, aber darauf gibt es einige Fallstricke zu achten (Effective Java, 2. Auflage, Punkt 10).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X