Будет выведено test1. Присваивание second = "test2" меняет ссылку в переменной second, а не строковый объект, на который продолжает ссылаться first.
Разбор поведения кода при копировании строк
Будет выведено test1. Присваивание second = "test2" меняет ссылку в переменной second, а не строковый объект, на который продолжает ссылаться first.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Что выведет следующая программа?
string first = "test1";
string second = first;
second = "test2";
Console.WriteLine(first);
Ответ
Будет выведено test1. Присваивание second = "test2" меняет ссылку в переменной second, а не строковый объект, на который продолжает ссылаться first.
После second = first обе переменные ссылаются на одну строку test1. Строки в C# неизменяемы: операция присваивания другой строки не может изменить содержимое прежней.
В последней строке читается first, которая всё ещё указывает на test1. Аналогично методы изменения строк возвращают новую строку, а не редактируют существующую на месте.