Difference between string and stringbuilder in C# is one of the frequently asked question in all c# interviews and all of us answer something in common
String is Immutable and StringBuilder is Mutable
This is a one word answer. In this article I would like to dig things in more details
Don’t Ignore Basics
Both String and Stringbuilder represent sequence of characters. When we list out their differences some of us don’t remember basic difference. That is String Class is in the System Namespace While StringBuilder is in System.Text.
Sometimes Mute is Safe
Let us make the statement again “String is Immutable and StringBuilder is Mutable” [Don’t be Confused about which one is mutable and which one is not].
Immutability of string object Means, If any of your operation on the string instance changes it’s value, it will end up in the creation of new instance in a different address location with modified value. Mutability of StringBuilder is just opposite for this.It won’t create new instance when their content changes as string does.Instead it makes the new changes in the same instance.
Mutability and Immutability of these two can be understood from following C# Program.
in line 11 content of str changes, so new instance is created in a different memory location with new value as shown in above image.
Even Though line 14 changes the value of stringbuilder variable sbr it won’t create a new instead it will keep appending new strings to existing instance.see how it looks in terms of memory
Because of this behavior of StringBuilder it also known as Mutable String.
I am not convinced
If you say I’m not convinced. let us check these behaviours using C# code snippet. For that I am using C# class ObjectIDGenerator(in System.Runtime.Serialization Namespace). Actually it will return an unique integer value for instances that we created in our programs.With the help of this class we can check whether new instance is created or not for various operations on string and stringbuilder .Consider following program
Output Will look like this