[Professional C# 7] String Immutable
string differs from the usual behavior for reference types. strings are immutable.
Making changes to one of these strings creates an entirely new string object, leaving the other string unchanged.
using System; class Program { static void Main() { string s1 = "a string"; string s2 = s1; Console.WriteLine("s1 is " + s1); Console.WriteLine("s2 is " + s2); s1 = "another string"; Console.WriteLine("s1 is now " + s1); Console.WriteLine("s2 is now " + s2); } }
The output from this is as follows:
s1 is a string
s2 is a string
s1 is now another string
s2 is now a string
What’s happening here is that when s1 is initialized with the value a string, a new string object is allocated on the heap.
When s2 is initialized, the reference points to this same object, so s2 also has the value a string.
However, when you now change the value of s1, instead of replacing the original value, a new object is allocated on the heap for the new value. The s2 variable still points to the original object, so its value is unchanged.