Я знаю, что строки неизменяемы, после создания мы не можем их изменить, я читал, что если мы создаем новый строковый объект и присваиваем ему значение, а затем мы назначаем другое значение тому же самому строковому объекту внутри, фактически создается другой объект и присвоено новое значение. Допустим, у меня есть:
string str = "dog";
str = "cat";
Если я напишу Console.WriteLine(str);
, он вернет cat
. Итак, внутри есть два объекта? Но у них одинаковое имя? Как это работает? Я провел некоторое исследование в Google, но пока не нашел чего-то достаточно убедительного для себя, чтобы прояснить свои мысли по этому поводу. Я знаю, что строки являются ссылочными типами, поэтому у нас есть объект в стеке со ссылкой на значение в куче, что происходит в этом случае? (см. код выше).
Я загрузил изображение, извините меня, если я ошибаюсь в отношении стека и кучи, поэтому я задаю этот вопрос. Отражает ли картинка то, что происходит в первой строке кода (string str = "dog";
)? И что тогда должно произойти во второй строке кода?? Значение dog
в куче меняется? И затем создается новый объект в стеке, ссылающийся на него? Что тогда происходит с объектом, который был там раньше? У них одинаковое имя? Извините за столько вопросов, но я думаю, что очень важно правильно это понять и знать, что происходит за кулисами...