日期:2014-05-18  浏览次数:20718 次

关于数组.集合类.装箱的问题
刚接触C#不久.在看书过程中发现以下问题理解不了.请各位大虾帮忙.谢谢
int 属于值类型,int 的值存在栈中
数组属于引用类型,整数数组存在堆中.
装箱是把栈中的数据复制到堆中的行为.
那么集合类呢?
按书本的解释.集合类应该属于元素为类的一种特殊的数组.
既然如此,集合类元素本就存储在堆中.没有经过从栈到堆的复制.为什么集合类插入一个元素时.为什么会发生自动装箱处理?

------解决方案--------------------
那要看插入的是什么元素,比如在ArrayList中插入int类型就会进行装箱操作。
如果插入string类型就不会进行装箱操作。
------解决方案--------------------
你要理解什么是装箱,c#中有两种类型,一种值类型也就是struct声明的,一种引用类型用class声明的。在这两种类型间转换的时候就产生了装箱和拆箱。
int i = 123;
object o = (object)i; // boxing

o = 123;
i = (int)o; // unboxing

一个集合里放的都是引用类型,如果插入了一个值类型,可能就要进行自动装箱,取出来的时候,需要进行类型转换。