Chinaunix首页 | 论坛 | 博客
  • 博客访问: 53295
  • 博文数量: 9
  • 博客积分: 146
  • 博客等级: 入伍新兵
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-24 17:06
文章分类

全部博文(9)

文章存档

2013年(2)

2012年(7)

分类: 嵌入式

2012-05-13 12:20:31

第1章 基本语言要素

string str1="str1"+9;//先对9装箱成Int32

string str2="str1"+9.ToString();//直接Concat()

装箱——将值类型转换成引用类型:
int i = 1; object o = i;
--这里会首先开辟4个字节的栈空间来存放变量i,然后会开辟变量o,这是一个4字节的指针,这个指针用于指向堆中的数据存放的首地址。这时需要将变量i所需的空间开辟到堆中,然后让o的指针指向新开辟的堆中的首地址处。这就是装箱。
 
拆箱——将引用类型转换为值类型:
object o = 1; int i = (int)o;
--这里的操作刚好和转向相反。会先在堆栈中开辟指针o的空间,然后指向堆中数据1所需的开辟了的数据空间首地址。然后,强转的拆箱操作会将堆中的数据重新赋值(不是复制哦)到栈——也就是在栈中重新开辟强转类型(这里是int)在栈中需要的内存空间,并将数据o在堆中的数据赋值过来。因为这里还需要多一步判定,就是判断o是否可以被正确的转换成int(不是会经常看到InvalidCastException么,这就是判断后并抛出异常的结果)。所以拆箱更消耗性能。
阅读(1761) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~