Пытаюсь понять что значит «строки не «изменяемы»? И казалось бы в этой статье автор из кожи вон лез и все по полочкам расставил, но я не понял. И для начала хотел бы понять как примерно выглядит память на разных этапах выполнения ниже представленного кода:
string str1 = "string1";
string str2 = str1;
str2 = str1 + "+2";
1) И так, после выполнения
string str1 = "string1";
происходит:
2) Далее, после выполнения
string str2 = str1;
память выглядит так:
Т.е. создается ссылка str2 которая указывает на новый участок памяти и туда копируется строка из str1.
Я правильно описал этот код?
Я правильно описал этот код?
Нет. string str2 = str1 здесь вы копируете ссылку в новую переменную.
А здесь str2 = str1 + "+2" вы создали новый объект. str1 продолжает ссылаться на старый.
Можно проверить равенство ссылок, с помощью ReferenceEquals
string str1 = "string1"; //создан первый объект, ссылка на него присвоена переменной str1
string str2 = str1; //ссылка на первый объект присвоена ещё и переменной str2
Сonsole.WriteLine(object.ReferenceEquals(str1,str2)); //true
str2 = str1 + "+2"; //создан второй объект, ссылка на него присвоена переменной str2
Сonsole.WriteLine(object.ReferenceEquals(str1,str2)); //false
Строки "неизменяемы" это значит, что несмотря на то, что это объекты ссылочного класса, они имеют признак типов-значений -- неизменяемость. Создав один раз объект string вы просто не сможете его изменить, нет ни одного метода для этого.
Даже так str2[0] = '!' вы не сможете сделать, компилятор не даст вам изменить объект строки таким способом. А такие методы как Replace, Substring, Trim возвращают новый объект.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости