2014-03-18 8 views
5

Warum String Klasse implementiert Cloneable Schnittstelle nicht?Warum String-Klasse nicht klonbar ist?

Zum Beispiel: (Wir schreiben diese Art von Code manchmal.)

String s1 = new String("Hello"); 

String s2 = new String("Hello"); 

Hier s1 = s2;!

Statt dies zu tun, wenn wir es getan haben könnte:

String s1 = new String("Hello"); 

String s2 = s1.clone(); 

leicht Dies könnte.

+4

Warum sollte es ...? Warum möchten Sie ein unveränderliches Objekt duplizieren/klonen? –

+0

Bitte beachten Sie die aktualisierte Frage. – Raj

+0

Tun Sie einfach 'String s2 = s1;'. Niemand kann das brechen. –

Antwort

3

Die Klasse String repräsentiert eine unveränderliche Zeichenfolge. Es würde keinen Zweck geben, eine String zu klonen. Wenn Sie das Gefühl haben, dass Sie es klonen müssen, können Sie einfach die gleiche Referenz verwenden und den gleichen Effekt erzielen.

Auch wenn Sie könnten clones1 als s2, dann würde s1 != s2 noch true sein. Sie würden immer noch auf bestimmte Objekte verweisen.

0

Sie können String-Klon mit

String clonedString = new String(stringToClone); 

so

String s1 = new String("Hello"); 
String s2 = new String(s1); 
+1

Aber sehen Sie die anderen Antworten: Wenn Ihre Lösung erfordert, dass Sie ein unveränderliches Objekt klonen, dann ist Ihre Lösung wahrscheinlich eine Art von hinterhältigen/schlauen Trick, der für andere Programmierer schwer zu verstehen sein wird. Das ist fast immer eine schlechte Sache. –