String s = "hello";
String backup_of_s = s;
s = "bye";
Zu diesem Zeitpunkt enthält die Sicherungsvariable noch den ursprünglichen Wert "Hallo" (dies liegt an der Unveränderlichkeit von String, oder?).
Aber ist es wirklich sicher , Strings mit dieser Methode zu kopieren (was natürlich nicht sicher ist, reguläre veränderbare Objekte zu kopieren), oder ist es besser, dies zu schreiben? ::
String s = "hello";
String backup_of_s = new String(s);
s = "bye";
Mit anderen Worten, was ist der Unterschied (falls vorhanden) zwischen diesen beiden Schnipsel?
BEARBEITEN - der Grund, warum das erste Snippet sicher ist:
Lassen Sie mich die Dinge anhand der bereits gegebenen guten Antworten (die sich im Wesentlichen auf die Frage des Leistungsunterschieds zwischen den beiden Ausschnitten konzentrierten) etwas detaillierter erläutern:
Strings sind in Java unveränderlich, was bedeutet, dass ein String-Objekt nach seiner Erstellung nicht mehr geändert werden kann. Daher,
String s = "hello";Erstellt eine neue String-Instanz und weist ihre Adresse zu s( sals Referenz auf die Instanz / das Objekt).
String backup_of_s = s;Erstellt eine neue Variable backup_of_sund initialisiert sie so, dass sie auf das Objekt verweist, auf das aktuell verwiesen wird s.
Hinweis: Die Unveränderlichkeit von Zeichenfolgen garantiert, dass dieses Objekt nicht geändert wird: Unsere Sicherung ist sicher
Hinweis 2: Der Java-Garbage-Collection-Mechanismus garantiert, dass dieses Objekt nicht zerstört wird, solange es von mindestens einer Variablen referenziert wird ( backup_of_sin diesem Fall).
Schließlich wird s = "bye";eine weitere String-Instanz erstellt (aufgrund der Unveränderlichkeit ist dies der einzige Weg) und die sVariable so geändert , dass sie jetzt auf das neue Objekt verweist.