装箱和拆箱

王朝other·作者佚名  2006-01-09
宽屏版  字体: |||超大  

在C#中的有两种类型的变量:值类型和引用类型。当值类型和引用类型相互转化时,会发生装箱和拆箱的过程。这里有一点要声明:经过拆箱或装箱的对象会多出它自己一份拷贝,如图所示:

从图可以看出它和它的拷贝不在一个存储区域。这也是值类型和引用类型的区别所在。值类型总是在栈中,而引用类型总是在托管堆中。(目前J2SE5.0也支持了装箱和拆箱,但是我目前不知道是否和C#一样)。为了进一步理解看下面例子:

struct Point{

public int x;

public int y;

}

static void Main(){

Point p;

p.x=10;

p.y=20;

Object o=p;//box. 将值类型从栈中拷贝到堆中。

/************************************************************************/

/*

* 从托管堆中将对象拷贝到栈中。

* */

/************************************************************************/

Point p2=(Point)p;

Console.WriteLine(“p2.x:="+p2.x+ “ p2.y:=“+p2.x);

p.x=16;

p.y=34;

Console.WriteLine(“p2.x:="+p2.x+ “ p2.y:=“+p2.x);

Console.WriteLine(“p.x:="+p.x+ “ p.y:=“+p.x);

}

输出结果为:

p2.x:=10;p2.y=20;

p2.x:=10;p2.y=20;

p.x:=16;p.y=34;

可知,变量经过拆箱/装箱后,得到是自己的另一份拷贝。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有