В .NET строки являются неизменяемыми, что означает, что их нельзя изменить.
Они также являются ссылочными типами, что означает, что при создании строки строковый объект создается в куче со ссылкой на его расположение в памяти в куча.
Когда вы создаете строку без использования оператора new
, CLR сначала находит совпадающую строку,
и, если находит, создает новую ссылку, указывающую на ту же строку в куче.
Вот почему в первом методе TestStrings1()
в приведенном ниже коде это не только одно и то же значение, но и один и тот же объект.
Однако в TestStrings2()
вы явно создаете новый объект с помощью оператора new
.
Это означает, что в куче будет два строковых объекта. Таким образом, строки имеют одно и то же значение, но являются разными объектами.
Чтобы лучше понять это, запустите приведенный ниже код в консольном приложении C#: