2012-04-12 17 views
5

Ich bin mir nicht sicher, ob das Folgende zu einer tiefen oder flachen Kopie führt.Klon Methode für Array eine tiefe oder eine flache Kopie?

public void viewImages(final String[] instancesFilename) { 

    String[] instances = (String[])instancesFilename.clone();  
} 

Gibt es eine einfache und schnelle Möglichkeit, ein String-Array tief zu kopieren?

Antwort

14

Zeichenketten in Java sind änderbar (kann ihren Wert nicht ändern). Es gibt also keinen erkennbaren Unterschied zwischen einer tiefen und flachen Kopie beim Kopieren von Strings.

Und nur um weiter zu verweisen: Die Kopie wird flach sein, aber das sollte kein Problem sein, da Strings unveränderlich sind.

Oh und witzige Tatsache: Zeichenfolgen können nicht mit der Klonmethode geklont werden. Wenn Sie also versuchen, eine tiefe Kopie von Zeichenfolgen mit der Klonmethode zu erstellen, erhalten Sie eine CloneNotSupportedException.

+0

Der Autor bittet darum, 'String []', nicht 'String' zu kopieren. Die Elemente von 'instancesFilename' könnten später von außen geändert werden, sodass das OP eine Kopie des Arrays erstellen möchte. –

+0

Nun, es ist * nachweisbar * (sind die Referenzen die gleichen), aber wenn Sie die Zeichenfolgen richtig verwenden, sollte es nicht * signifikant * sein. –

+0

@PhilippReichart: Aber das OP führt bereits einen Klon aus - "Deep Copy" vs. "shallow copy" kann in diesem Kontext nur darum gehen, ob die Strings geklont sind oder nicht - und wie diese Antwort sagt, ist es fast immer unwichtig. –

1

Hier ist eine interessante article discussing using serialization to make deep copies.

Die Objekte in der Aufrufgrafik müssen die Serialisierung unterstützen, aber in vielen Geschäftsarten von 3-Tier-Anwendungen ist diese Notwendigkeit vorhanden.

Der Artikel bietet eine Diskussion über tiefe Kopie und flache Kopie mit einigen Diagrammen.

Verwandte Themen