A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 迷你卡卡 中级黑马   /  2013-10-23 19:30  /  1693 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 迷你卡卡 于 2013-10-24 15:09 编辑

装箱就是将值类型转换为引用类型,拆箱就是将引用类型转换为值类型,
int mon=10;
string str=Convert.ToString(mon);
int sun=int.Parse(str);
求高手解答,第二句代码发生装箱了吗?第三句代码发生拆箱了吗?
还有就是拆箱与装箱对于程序的整体性能是不是有比较大的损耗呢?

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

6 个回复

倒序浏览
都没有发生装箱拆箱,
先看看如何定义:
装箱是将值类型转换为引用类型 ;
拆箱是将引用类型转换为值类型
例子:
int i=100;
object obj=i;//装箱
int o=(int)obj;//拆箱

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
装箱是将值类型转换为引用类型 ,拆箱是将引用类型转换为值类型 ,如果叫不准时建议用反编译器(Reflector)来查看
  1. int mon=10;
  2. string str=Convert.ToString(mon);
  3. int sun=int.Parse(str);
复制代码
都没有发生装箱和拆箱,我用反编译器看的,没有显示box或unbox

1.png (28.38 KB, 下载次数: 44)

1.png

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
都没有进行装箱和拆箱,
     装箱是将值类型转换为引用类型 ;
     而拆箱,实质上就是将引用类型转换为值类型的过程,拆箱的执行过程大致可以分为以下两个阶段。
(1)检查对象的实例,看它是不是值类型的装箱值。
(2)把这个实例的值复制给值类型的变量

总结:
装箱是将值类型转换为引用类型Object,这使得值类型可以存储在垃圾回收堆中,而拆箱是从对象中提取值类型。
相对于简单的赋值而言,装箱和拆箱过程需要进行大量的计算。对值类型进行装箱时,必须分配并构造一个全新的对象;而拆箱所需的强制转换也需要进行大量的计算,因此装箱和拆箱会对程序的执行性能有影响。

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
没有实现拆装箱
Convert.ToString(mon);把 int 的每一位根据 ASSIC 表得出 char 值,再把所有 char 组合在一起成 string ,这个起码参数传递时没拆装箱,底层的转换函数应该是 native 的,也没装拆的说法

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
多谢各位的耐心解答
回复 使用道具 举报
int 和string 类型都是值类型。所以不存在。
拆箱是  引用类型转换为值类型。
装箱是 值类型转换为引用类型。
不管是发生装箱还是拆箱,必须要复合一个条件:发生拆箱或者装箱的两种类型必须有继承关系。

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马