【发布时间】:2016-12-12 04:47:46
【问题描述】:
我知道字符串是不可变的,一旦创建我们就无法更改它,我读过如果我们创建一个新的字符串对象并为其分配一个值,然后我们在内部为同一个字符串对象分配另一个值实际上存在创建并分配了新值的另一个对象。假设我有:
string str = "dog";
str = "cat";
如果我写Console.WriteLine(str);,它会返回cat。
那么内部有两个对象?但是他们有相同的名字吗?它是如何工作的?我已经对谷歌进行了一些研究,但我还没有找到足以让我信服的东西,所以我可以澄清我对此的想法。
我知道字符串是引用类型,所以我们在堆栈中有一个对象引用了堆中的一个值,在这种情况下发生了什么?(参见上面的代码)。
我已经上传了一张图片,如果我对堆栈和堆的概念有误,请向我道歉,这就是我问这个问题的原因。
图片是否反映了第一行代码(string str = "dog";)中发生的情况?然后第二行代码应该发生什么?堆中的dog 值发生了变化?然后在堆栈中创建一个引用它的新对象?那么之前存在的对象会发生什么?他们有相同的名字吗?
很抱歉有这么多问题,但我认为正确理解这一点并了解幕后发生的事情非常重要...
【问题讨论】:
标签: c# string heap-memory stack-memory