C#中值类型和引用类型的区别

1.    值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的

地址。

2.    值类型存取速度快,引用类型存取速度慢。

3.    值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用

4.    值类型继承自System.ValueType,引用类型继承自System.Object

5.    栈的内存分配是自动释放;而堆在.NET中会有GC来释放     

6.      值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。

7. 值类型变量直接把变量的值保存在堆栈中,引用类型的变量把实际数据的地址保存在堆栈中,而实际

数据则保存在堆中。注意,堆和堆栈是两个不同的概念,在内存中的存储位置也不相同,堆一般用于存储

可变长度的数据,如字符串类型;而堆栈则用于存储固定长度的数据,如整型类型的数据int(每个int变量

占用四个字节)。由数据存储的位置可以得知,当把一个值变量赋给另一个值变量时,会在堆栈中保存两

个完全相同的值;而把一个引用变量赋给另一个引用变量,则会在堆栈中保存对同一个堆位置的两个引用

,即在堆栈中保存的是同一个堆的地址。在进行数据操作时,对于值类型,由于每个变量都有自己的值,

因此对一个变量的操作不会影响到其它变量;对于引用类型的变量,对一个变量的数据进行操作就是对这

个变量在堆中的数据进行操作,如果两个引用类型的变量引用同一个对象,实际含义就是它们在堆栈中保

存的堆的地址相同,因此对一个变量的操作就会影响到引用同一个对象的另一个变量。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 相同点:都继承自 system.object类。 不同点: 1)范围: valueType:结构体,en...
    老掌门CEO阅读 553评论 0 0
  • 一.C#中的值类型和引用类型 概念 值类型直接存储其值。 引用类型存储对值的引用。 说起来有些拗口,其本质是Val...
    SolaceClover阅读 5,147评论 0 0
  • 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。 当在一段代码块定义一个变量时,Java就...
    木有鱼丸啦阅读 575评论 0 0
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,418评论 11 349
  • 寒冬过去 春天还没有温暖到心间 天空是清透的蓝蓝 你已经来到了 你带来阳光 带来植...
    依一依一阅读 180评论 0 2