值类型:
- 包含了所有简单类型(整数、浮点、bool、char)、struct、enum,继承自System.ValueType
引用类型:
- 包含了string,object,class,interface,delegate,array
继承自System.Object
两者的主要区别
- 值类型存储在栈内存中,引用类型数据存储在堆内存中,在堆当中存放的只是一个地址,指向堆中的对象
- 值类型存取快,引用类型存取慢(为什么?)
- 值类型存储在栈,栈内存上的对象紧凑而连续,连续存储,想要可以直接获取到,不需要二次寻址
- 引用类型存储在堆,引用类型分散在堆中,地址不连续,获取到数据之前还需要进行一次二次寻址,变量本身存放是一个地址,需要通过这个地址在堆中找才能得到这个数据
- 栈的内存是自动释放的,堆内存是.NET 中会由GC来自动释放
- 赋值上有区别,值类型是拷贝赋值,修改副本后不会影响原始的变量;引用类型拷贝的是引用的地址,修改副本实际上修改的是同一个对象,会影响原始的变量(除了String类型是特殊的)
本文作者:xuxuxuJS
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA
许可协议。转载请注明出处!