本帖最后由 Darkhorse′Xa 于 2014-3-31 10:59 编辑
你可以这么想:
值类型他们的地址和所存储的值都是在内存的栈里头,首先在栈里开辟空间,值是存在在栈空间里.然后当我们进行赋值的时候是将A(比如)这个空间里头的值拷贝一份给B这个空间.所有你改变A变量的值,对B变量并没有影响.
引用类型比如声明一个string str=c#首先也会在栈里开辟空间,同时会在堆里也开辟一块合适大小的空间.而值是存放在堆里面的也就是说c#存放在堆里头,那堆是有地址的吧,所有栈里面存放的是什么呢?其实就是堆的内存地址.当我们进行赋值的时候同样是将栈里的地址拷贝一份给str2(比如)空间.而栈里存储的是这个堆的地址,那把地址拷贝一份给str2空间是不是也就是说他们指向的是同一个堆,当我们把str2的值改变了,那str的值是不是也会跟着改变呢?是吧.
希望对你有帮助
|