装箱与拆箱

简单理解一下:装箱是把值类型转换为引用类型拆箱是把引用类型转换为值类型

 

下面以题目的形式来理解:

请指出下面代码中,哪些地方会发生装箱或拆箱

int a = 10;

object obj = a;

obj = 100;

int b = (int)obj;

Type type = b.GetType();

string str = b.ToString();

Console.Write(obj);

Console.Write(b);

 

【答案】

object obj = a;  会发生装箱,把当值类型赋予引用类型时,会发生装箱;

obj = 100; 会发生装箱,原因同上;

int b = (int)obj; 会发生拆箱,当把引用类型赋予值类型时,会发生拆箱;

Type type = b.GetType(); 会发生装箱,类成员函数,实际上把该类的对象作为第一个参数,因为GetType()是object的成员,所以它的第一个参数类型为object,而b为int型,把int型赋予object时会发生装箱;

 

注意:最后三句不会发生装箱

string str = b.ToString(); 虽然ToString()是object的方法,但int已经对它进行了重写,并且值类型都是密封的,所以将会直接调用int的ToString()方法;

而最后两句:Console.Write()共有18个重载的方法,其中有Console.Write(object value)及Console.Write(int value)两个重载方法,所以不会产生装箱。

 

 

posted @ 2020-10-23 00:18  狐狸爱看书  阅读(89)  评论(0编辑  收藏  举报