黑马程序员技术交流社区

标题: 关于装箱与拆箱 [打印本页]

作者: fcyan86    时间: 2013-6-4 16:08
标题: 关于装箱与拆箱
本帖最后由 fcyan86 于 2013-6-4 23:15 编辑

装箱可以将一个值类型转换成一个引用类型,拆箱是将对象丰用保存的值转换成对应的栈上的值类型的过程,
值类型保存在栈上,引用类型保存在堆上
那么:
装箱是在堆上创建一个对该值的引用,还是将该值复制一份到堆上,然后返回堆上该值的引用。

作者: 曾大鹏    时间: 2013-6-4 17:10
1
装箱: 将值类型转换为引用类型的过程
拆箱:将引用类型转换为值类型的过程
装箱和拆箱都是在父类和子类的基础上
也就是显示转换和隐式转换

int n=10;
object o=n;//装箱
int m=(int)o;//拆箱
Console.WriteLine(m);

//由于Int32是结构,结构是值类型
由于Int32还是实现了Icomparable接口,接口是引用类型
Int32到Icomparable 发生了装箱,Icomparable到Int32发生了拆箱//
int n1=10;
Icomparable com=n1;//装箱
int m=(int)com;//拆箱

string s1="a";
string s2="b";
int s3=10;
double s4=1.0;
string.Concat(s1,s2,s3,s4); //Concat里面参数是object ,object是引用类型,string是引用类型,int,double 是值类型,所以发生两次装箱。
2
注意 装箱的时候 ,使用什么类型装的,拆箱的时候就必须使用对应的类型才能拆箱




作者: 李奔    时间: 2013-6-4 17:41
装箱是将该值复制一份到堆上,然后返回堆上该值的引用。
作者: fcyan86    时间: 2013-6-4 23:14
李奔 发表于 2013-6-4 17:41
装箱是将该值复制一份到堆上,然后返回堆上该值的引用。

还是这个答案比较实在,2楼的复制的内容,有此些答非所问
作者: 许庭洲    时间: 2013-6-5 09:06
值得学习ing!
作者: 李奔    时间: 2013-6-6 23:02
fcyan86 发表于 2013-6-4 23:14
还是这个答案比较实在,2楼的复制的内容,有此些答非所问

谢谢!
不知道现在加分的童鞋都怎么想的,自己辛辛苦苦回答的问题,虽然短但简洁明了,使人一看就能明白,
而有的人虽然回答的长,但都是复制,却得分了!
强烈建议加分的童鞋好好反思一番!!!:@
作者: fcyan86    时间: 2013-6-6 23:52
李奔 发表于 2013-6-6 23:02
谢谢!
不知道现在加分的童鞋都怎么想的,自己辛辛苦苦回答的问题,虽然短但简洁明了,使人一看就能明白 ...

多发贴,一会就升上去了

作者: 李奔    时间: 2013-6-7 00:29
谢谢童鞋!
{:soso_e118:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2