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