Another recent C# interview question I had was if I knew what Boxing and Unboxing is. I explained that value types are on Stack and reference types on Heap. When a value is cast to a reference type, we call it boxing and vice versa.
Then he asked me to calculate this:
int i = 20;
object j = i;
j = 50;
What is i
?
I messed it up and said 50, where its actually 20. Now I think understand it why, however when I was playing with different combinations I was surprised to see this:
Object a = 1; // Boxing
Object b = a; // referencing the pointer on stack to both objects on heap
a = 2; // Boxing
I was expecting to see b == 2
as well, but it isn't, why? Is it because the second boxing destroys and replaces the whole a
object on the heap?
Because if I do this, it's fine:
public class TT
{
public int x;
}
TT t = new TT();
t.x = 1;
TT t2 = new TT();
t2.x = 2;
t = t2;
t.x = 3;
What is t2.x
? It should be 3, and it is. But this is not an example of boxing / unboxing at all, is this correct? So how would you summarize this?
Could the values ever become the same in a boxing/unboxing conversion as above?