Strings vs classes when both are reference types

Viewed 410

Here is how my last interview went:

Question: Where are strings stored?

Answer: Heap since it is a reference type

Question: Explain me this following code:

static void Main(string[] args)
{
     string one = "test";
     string two = one;
     one = one + " string";

     Console.WriteLine("One is {0}" , one);
     Console.WriteLine("Two is {0}", two);
}

Answer: Drew two diagrams like below:

(represents the statement, string two = one;

enter image description here

(represents the statement, one = one + " string";. A new string is created on heap and assigned)

enter image description here

Question: Correct. Draw similar for the code snippet below:

class Program
{
    static void Main(string[] args)
    {
        Test one = new Test { someString = "test" };
        Test two = one;
        one.someString = "test String";

        Console.WriteLine("One is {0}", one.someString);
        Console.WriteLine("Two is {0}", two.someString);
    }
}

class Test
{
    public string someString { get; set; }
}

Answer:

[Test two = one] enter image description here

one.someString = "test String";

enter image description here

Question: Ok. You said both strings and classes are reference types. Then why did a new object for string is created and assigned the value whereas for class, the existing string property itself gets modified ?

Answer: Because strings are immutable whereas classes are mutable.

(Though I cleared the interview, I still did not understand this behaviour. Why did the designers of class make it mutable while keeping strings immutable ? There are a lot of therotical answers everywhere, but could any one make it simple by explaining this particular behaviour with the above code ?)

4 Answers
Related