As part of graduation projects , each year we should have internships in summer , so we had to prepare ourselves for interviews for technical and non technical question . I remember in one of the interviews , the last question was ,’can you explain to me what is boxing and unboxing ? ‘ and I was like :
![OMG](../../img/post4/giphy (1).gif)
Well , I stood like that for 5 minutes and ended up saying that I don’t know the answer , then the interviewer get up from his desk and explained it to me by writing on a blackboard . When he was explaining I was saying in my mind : ‘Dude ,I have been doing that all my life , I didn’t know it’s called boxing and unboxing ! ‘ .
Well , that was an interview that didn’t go well , but at least I learned something from it which encouraged me to write about it now .
What is Boxing And Unboxing ? Boxing is the process of converting a value type to the type object or to any interface type implemented by this value type.
So when we say boxing,we say it’s the process of taking a value type ,putting it inside a new object on the heap and storing a reference to it on the stack . Unboxing is the exact opposite.
The difference between a value type and a reference type is that the value type stores its value directly,a reference type stores a reference that points to an object on the heap that contains the value. so : Unboxing extracts the value type from the object. Boxing is implicit and unboxing is explicit.
Let’s start by a simple boxing example :
int i = 123456; // The following line boxes i inside object o. object o = i; The object o now, can be unboxed and assigned to integer variable i
o = 123; i = (int)o; // unboxing o Let’s see one more example , so we have the following code :
tip
class TestUnboxing { static void Main() { int i = 123; object o = i; // implicit boxing
try
{
int j = (short)o; // attempt to unbox
System.Console.WriteLine("Unboxing OK.");
}
catch (System.InvalidCastException e)
{
System.Console.WriteLine("{0} Error: Incorrect unboxing.", e.Message);
}
}
}
So the output of this code if you try to execute it is , ” Specified cast is not valid. Error: Incorrect unboxing. ” and why is that ?
As you can see , we have defined i as int , but when we tried to unbox it we used short which cause the exception here , so what we need to do is :
int j = (int) o;
A picture that can explain all that :
Performance In relation to simple assignments, boxing and unboxing are computationally expensive processes. When a value type is boxed, a new object must be allocated and constructed. To a lesser degree, the cast required for unboxing is also expensive computationally. For more information, see Performance in Microsoft official website .
Happy boxing && unboxing day 🙂