Пару недель назад меня попросили задать вопрос C# на собеседовании. Вопрос был именно этот:Новая ссылка при конкатенации строки
string a = "Hello, ";
for(int i = 0; i < 99999999; i++)
{
a += "world!";
}
меня спросили именно, «почему это плохой метод каскадного строки?». Мой ответ был своего рода «удобочитаемость, добавление должно быть выбрано» и т. Д.
Но, по-видимому, это не так, по словам парня, который брал у меня интервью. Итак, по его словам, каждый раз, когда мы конкатенируем строку, из-за структуры CLR, в памяти создается новая ссылка. Итак, в конце следующего кода у нас будет 99999999 строковой переменной «a» в памяти.
Я думал, что объекты создаются только один раз в стеке, как только им присваивается значение (я не говорю о куче). Я знал, что выделение памяти выполняется один раз в стеке для каждого примитивного типа данных, их значения изменяются по мере необходимости и удаляются при завершении выполнения области. Это неправильно? Или, являются ли новые ссылки переменной «a», фактически созданной в стеке, каждый раз, когда она конкатенирована?
Может кто-нибудь объяснить, как это работает для стека? Большое спасибо.
связаны, если не дубликат: http://stackoverflow.com/q/2365272/578411 – rene
Я думаю, что мой вопрос не на самом деле дубликат. –
Конечно, но я не могу себе представить, что я могу найти дубликат, который лучше подходит: как насчет этого: http://stackoverflow.com/q/10341188/578411 – rene