Manip, although you are correct, this has nothing to do with why
the String object is immutable. If I append a few characters to
a StringBuilder, the same move/copy/free thing is done, but the
StringBuilder class is not immutable.  Let's take a look at an
example with a method that both the StringBuilder and String
classes have:  String x = "hello"; String y = x.Replace('e',
'u'); StringBuilder a = new StringBuilder("hello");
StringBuilder b = a.Replace('e', 'u'); Console.WriteLine("x: " +
x); Console.WriteLine("y: " + y); Console.WriteLine("a: " +
a.ToString()); Console.WriteLine("b: " + b.ToString());  What's
the output of this program: x: hello y: hullo a: hullo b: hullo
As you can see, the Replace call did not change the String class
instance, but it did change the StringBuilder instance (the only
reason why StringBuilder.Replace also returns an instance is to
make it possible to chain calls. In fact, it doesn't return a
new instance, but the same one, so you'll find that
Object.ReferenceEquals(a, b) ==