装箱与拆箱-好汉001

问题:
  1. 什么是装箱与拆箱?
  2. 区别是什么?
  3. 作用是什么?
  4. 代码实现例子?
解答:
    第一点:
  1.  装箱就是把值类型转换成引用类型的过程;反之拆箱就是引用类型转换在值类型的过程;
  2. 值类型就是变量的数据存储在栈内存,就是变量名就是包括了数据;引用类型则是变量数据地址存在栈,地址指向堆内存,堆内存储存着真正数据,变量名是一个地址,指向堆内存地始位置;
  3. 值类型变量当超出作用域时,内存自动回收,与堆则要等垃圾回收;
  4. 值类型有:结构类数据类型,bool,用户自定义结据),杖举,可空类型。
  5. 引用类型有:自定义类,接口等;
第二点;
  1. 装箱可以explicit或implicit; 如object o = 3;object oo = (object)4;
  2. 拆箱则要显式:object o = 3; int a = (int)o;
  3. 装箱与拆箱一般在我们不知不觉中产生,如:
            data d = new data();//值类型;
            d.a = 4;
            ArrayList al = new ArrayList();
            al.Add(d);//产生装箱过程,刚值类型数据拷贝一份进堆;
            data dd =(data)al[0];//拆箱,从堆中,拷贝一份数据进栈;
            dd.a = 5;
可以看出,这样对性能有影响;减少出现这样的情况;
第三点:
     装箱与拆箱可解决部分不确定类型的影响,只要合适地转换就能解决部分问题;但现在流行用泛型解决问题;
ps:待各位指向不足与提供更深入探讨;
posted @ 2013-10-19 14:46  火影jia  阅读(109)  评论(0编辑  收藏  举报