In der einen oder anderen Form stoße ich oft auf die folgende Frage (hier in Pseudocode gestellt):
String myString = "Hello"
someObject.stringProperty = myString
myString = "World"
Warum ist someObject.stringProperty jetzt nicht gleich "World"?
Es scheint Verwirrung darüber zu herrschen, welche Rolle die folgende Aussage bei der Erklärung spielt, warum dies der Fall ist:
Strings sind unveränderlich
Was meinen Sie dazu?
Wenn Sie glauben, dass diese Aussage nicht zutrifft, möchte ich Sie Folgendes fragen: In einer Sprache, in der Zeichenketten waren veränderbar sind und der Zuweisungsoperator ihren tatsächlichen Wert verändert (anstatt einfach nur die Referenz zu ändern), würde Ihre Antwort dann immer noch Sinn machen?
EDITAR:
OK, ich habe das Gefühl, dass ich einige Dinge klarstellen muss:
-
Ich bin nicht verwirrt darüber, wie Zeichenketten, Referenzen oder Zuweisungen funktionieren. Ich bin mir über dieses Thema vollkommen im Klaren. Ich frage nicht, wie Strings funktionieren. Ich frage: "Welche Rolle spielt die Unveränderlichkeit von Zeichenketten bei der Erklärung von Zeichenkettenreferenzen für Entwickler". Wir können uns die Ad-Hominem-Angriffe sparen, dass ich verwirrt sein muss.
-
Ich suche nach einer logisch strengen Antwort für den Entwickler, der die zitierte Frage stellt, die die Unveränderlichkeit von Zeichenketten nicht beinhaltet oder voraussetzt.
Eine Kategorisierung der vorhandenen Argumente:
-
String Immutability has nothing to do with it because the references are changing, not the values of the strings
Diese Antwort setzt genau die Tatsache voraus, nach der ich frage. -
Assignment means assignment of references not assignment of values
Dies setzt wiederum genau die Tatsache voraus, nach der ich frage. Es gibt keinen Grund für diese muss bei Zeichenketten der Fall sein. Es ist einfach ist der Fall für Saiten aus Leistungs- und anderen Gründen.