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?
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?
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.
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 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.