黑马程序员技术交流社区
标题:
值类型和引用类型的区别是什么
[打印本页]
作者:
mr_jack
时间:
2014-3-31 09:47
标题:
值类型和引用类型的区别是什么
值类型和引用类型的区别是什么,举个通俗易懂的例子呢.
作者:
Darkhorse′Xa
时间:
2014-3-31 10:52
本帖最后由 Darkhorse′Xa 于 2014-3-31 10:59 编辑
你可以这么想:
值类型他们的地址和所存储的值都是在内存的栈里头,首先在栈里开辟空间,值是存在在栈空间里.然后当我们进行赋值的时候是将A(比如)这个空间里头的值拷贝一份给B这个空间.所有你改变A变量的值,对B变量并没有影响.
引用类型比如声明一个string str=c#首先也会在栈里开辟空间,同时会在堆里也开辟一块合适大小的空间.而值是存放在堆里面的也就是说c#存放在堆里头,那堆是有地址的吧,所有栈里面存放的是什么呢?其实就是堆的内存地址.当我们进行赋值的时候同样是将栈里的地址拷贝一份给str2(比如)空间.而栈里存储的是这个堆的地址,那把地址拷贝一份给str2空间是不是也就是说他们指向的是同一个堆,当我们把str2的值改变了,那str的值是不是也会跟着改变呢?是吧.
希望对你有帮助
1.png
(72.97 KB, 下载次数: 7)
下载附件
2014-3-31 10:59 上传
作者:
shangxin
时间:
2014-4-1 10:37
C#将类型分为两类,一类是值类型,另一类是引用类型。大部分固有的基本类型(如整型,浮点型)是值类型,结构类型也是值类型。引用类型包括类、接口、数组和字符串。基本的概念非常简单,那就是一个值类型的实例代表了实际的数据(存在栈中),而一个引用类型的实例代表指向数据的指针或者引用(存在堆中)。
在C#中是这样的:
int x1 = 3; // x1是堆栈上的值
int x2 = new int();
x2 = 3; // x2还是堆栈上的值!
作者:
邓江红
时间:
2014-4-1 11:02
每一个值类型都有一个独立的内存区域保存自己的值,调用它的时候调用的是他的值,而引用类型调用的是内存中的地址 比如a1=18,这时候在内存中保存的是18,当把a1付给a2的时候,他们两个应用的是同一个内存空间,a2的值会保存为a1的值,当把a2改为20是,应为a1和a2引用的是同一个所以a1也变成20了,这是引用类型,值类型是当把a1付给a2时会为a2在开一块新的空间保存a1的值。当把a2改成20时就会在a2的空间保存20,和a1就没关系了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2