代码改变世界

C#值类型与引用类型区别

2014-04-11 17:20  hduhans  阅读(336)  评论(0编辑  收藏  举报

  值类型是只由实际值表示的数据类型,引用类型是只由实际值引用(类似指针)表示的数据类型。

1、值类型与引用类型的区别:

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

   2) 值类型的变量直接存放实际的数据,而引用类型的变量存放的则是内存堆中数据的地址,即对象的引用;

   3) 值类型继承自System.ValueType,引用类型继承自System.Object;

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

   5) 值类型存取速度快,引用类型存取速度慢;

   6) 值变量赋值时,会在栈中保存两个完全相同的值,改变值独立;引用变量赋值时,会拷贝对相同对象的同一个引用,改变变量值实际是改变堆地址对象中的值,会影响另一个引用变量值;

2、内存堆和栈的区别,堆一般用户存储可变长度的数据,如字符串类型;而栈用于存储固定长度的数据,如整型int。