Hier ist eine gute Möglichkeit, über den Unterschied zwischen Werttypen, Wertübergabe, Referenztypen und Referenzübergabe nachzudenken:
Eine Variable ist ein Container.
Eine Variable vom Typ Wert enthält eine Instanz. Eine Variable vom Referenztyp enthält einen Zeiger auf eine Instanz, die an einer anderen Stelle gespeichert ist.
Durch Ändern einer Variablen vom Typ Wert wird die darin enthaltene Instanz mutiert. Durch Ändern einer Referenzvariablen wird die Instanz mutiert, auf die sie verweist.
Separate Referenztypvariablen können auf dieselbe Instanz verweisen. Daher kann dieselbe Instanz über jede Variable mutiert werden, die darauf verweist.
Ein übergebenes Wertargument ist ein neuer Container mit einer neuen Kopie des Inhalts. Ein als Referenz übergebenes Argument ist der ursprüngliche Container mit seinem ursprünglichen Inhalt.
Wenn ein Argument vom Werttyp als Wert übergeben wird: Die Neuzuweisung des Inhalts des Arguments hat keine Auswirkungen außerhalb des Gültigkeitsbereichs, da der Container eindeutig ist. Das Ändern des Arguments hat keine Auswirkungen außerhalb des Gültigkeitsbereichs, da die Instanz eine unabhängige Kopie ist.
Wenn ein Argument vom Referenztyp als Wert übergeben wird: Die Neuzuweisung des Inhalts des Arguments hat keine Auswirkungen außerhalb des Gültigkeitsbereichs, da der Container eindeutig ist. Das Ändern des Inhalts des Arguments wirkt sich auf den externen Bereich aus, da der kopierte Zeiger auf eine gemeinsam genutzte Instanz verweist.
Wenn ein Argument als Referenz übergeben wird: Die Neuzuweisung des Inhalts des Arguments wirkt sich auf den externen Bereich aus, da der Container gemeinsam genutzt wird. Das Ändern des Inhalts des Arguments wirkt sich auf den externen Bereich aus, da der Inhalt gemeinsam genutzt wird.
Abschließend:
Eine Zeichenfolgenvariable ist eine Referenzvariable. Daher enthält es einen Zeiger auf eine Instanz, die an einer anderen Stelle gespeichert ist. Bei der Übergabe als Wert wird der Zeiger kopiert. Das Ändern eines Zeichenfolgenarguments sollte sich daher auf die gemeinsam genutzte Instanz auswirken. Eine Zeichenfolgeninstanz hat jedoch keine veränderlichen Eigenschaften, sodass ein Zeichenfolgenargument ohnehin nicht geändert werden kann. Bei der Übergabe als Referenz wird der Container des Zeigers gemeinsam genutzt, sodass die Neuzuweisung weiterhin Auswirkungen auf den externen Bereich hat.