我读过Difference between a Value Type and a Reference Type,在这篇文章中,作者说:
因为引用类型表示变量的地址而不是数据本身,所以将引用变量分配给另一个不会复制数据 . 相反,它会创建引用的第二个副本,它引用堆的相同位置作为原始值
基于上面的引用,我期望下面的代码将一个引用变量分配给另一个,不会复制数据,但它确实也在复制数据 . 你能帮我理解一下吗?
Class1 i1 = new Class1();
i1.Name = "Name1";
Class1 i2 = i1;
//i2.Name is "Name1"
对于 i2
我希望它引用堆的相同位置作为正确的 i1
值,但基于文章不应复制数据 . 另外我的问题不应该被标记为重复,因为我知道值和引用类型之间的区别,我只需要对引用类型进行一些澄清,如果我们可以简单地使用赋值,那么深拷贝/克隆/浅层的用法是什么?
2 回答
正确,它们指的是内存中的相同位置 .
再次纠正,数据没有复制,让我们一起说明:
现在,当你执行
Class1 i2 = i1;
时,你实际上是在复制i1
的引用并将其分配给i2
,您可以将其视为:因此
i1.Name
和i2.Name
具有相同的名称,因为i1
和i2
都指向内存中的同一对象 .引用只是指向对象的指针 . 这样做只是复制参考 . 如果你这样做
i2.Name = "foobar";
i1.Name
也会改为foobar
.