类型区分为这两大类的主要原因是在于执行性能与内存资源管理的不同。由于值类型变量直接在堆栈中存储该类型的值,此类类型在内存的使用上以及访问的效能上比引用类型更好。因为引用类型变量存放的是指向实际对象的指针,因此访问对象时必须多进行一次内存引用的操作方可获得数据。且引用类型的对象必须分配多余的内存来存放虚函数指针及线程同步块,对于内存的需求较大。而使用引用类型的优点是回收站会自动替您管理分配在托管堆当中的内存。
值类型 | 引用类型 | |
变量中存放 | 真正的数据 | 指向数据的引用指针 |
内存空间分配 | 堆栈(Stack) | 托管堆(Managed Heap) |
内存需求 | 一般来说较少 | 较大 |
执行效能 | 较快 | 较慢 |
内存释放时间点 | 执行超过定义变量的作用域 | 由回收站负责回收 |
可以为null | 不可 | 可以 |