首先先了解一下什么是值类型和引用类型:
值类型:包括int ,float,bool的基础类型,以及stuct定义的类型,如DateTime.
引用类型:包括string(string 是一种特殊的引用类型),数组,以及用class定义的类型都是引用类型.
概括的讲:一个值类型的实例代表的是实际的数据,而引用类型的实例代表指向数据的指针和引用。值类型存储在堆栈中,而引用类型存储在托管堆中。
值类型 | 引用类型 | |
内存分配地点 | 分配在栈中 | 分配在堆中 |
效率 | 效率快不需要地址转换 | 效率低要地址转换 |
内存回收 | 使用完后,立即回收 | 使用完后不是立即回收,而是等待GC回收 |
赋值操作 | 创建一个同值新对象,只对其复制 | 只是对原有对象的引用 |
类型扩展 | 不易扩展 | 容易扩展,方便与类型扩展 |
函数参数与返回值 | 是对象的复制 | 是原有对象的引用,并不产生新的对象 |