int => double , double => int 로 변환 하는것이아닌 object => int , int=> object 로 변환하는것입니다. 메모리 영역을 생각을 하고 바라 보아야합니다. 저희가 아는 데이터타입 스택영역입니다. 그래서 int-> double 은 스택영역에서의 형변환입니다.
하지만 object => int 는 힙영역에서 스택영역 즉 값 형식을 참조 형식으로 변환하는 것을 말하며 스택에 있는 데이터가 힙으로 복사 int => object 스택영역에서 힙영역으로 형변환 참조 형식을 값 형식으로 변환하는 것을 말하며 힙에 있는 데이터가 스택으로 복사가 이루어집니다.
이제 여기서 Boxing 은 스택영역에서 힙영역으로 형변환이 이루어지는 것입니다.
여기선 암시적 형변환 이 가능합니다.
물론 명시적 형변환 도 가능합니다.
using System;
namespace BoxingUnBoxing
{
class Program
{
static void Main(string[] args)
{
int a = 123;
object o = a;
Console.WriteLine(o);
Console.Read();
}
}
}
UnBoxing은 힙영역에서 스택영역으로 형변환이 이루어지는 것입니다.
using System;
namespace BoxingUnBoxing
{
class Program
{
static void Main(string[] args)
{
object o = 123;
int a = (int)o;
Console.WriteLine(o);
Console.Read();
}
}
}