Пытаюсь понять что значит «строки не «изменяемы»? И казалось бы в этой статье автор из кожи вон лез и все по полочкам расставил, но я не понял. И для начала хотел бы понять как примерно выглядит память на разных этапах выполнения ниже представленного кода:
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 возвращают новый объект.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Пытаюсь написать службу которая каждую минуту будет записывать в файл фразу, предположим "Hello World" с новой строки
К проекту подключен внешний Service ReferenceСгенерированный код в Reference
Имеется Slider ,в инспекторе maxValue = 50 , программно задаю maxValue = 100 при запуске как было 50 так и остается, почему? Пробовал из в Awake и Start, тот де результат...
Событие нажатия клавиши альт срабатывает только один раз, но при клике правой кнопкой мыши в рабочей области снова срабатывает один раз