В приведенном ниже коде я проверяю равенство ссылок на объекты.
string x = "Some Text";
string y = "Some Other Text";
string z = "Some Text";
Console.WriteLine(object.ReferenceEquals(x, y)); // False
Console.WriteLine(object.ReferenceEquals(x, z)); // True
Console.WriteLine(object.ReferenceEquals(y, z)); // False
y = "Some Text";
Console.WriteLine(object.ReferenceEquals(x, y)); // True
Console.WriteLine(object.ReferenceEquals(x, z)); // True
Console.WriteLine(object.ReferenceEquals(y, z)); // True
Здесь:
-
x
иz
относится к одному и тому же объекту; Я могу сказать, чтоx
интернирован иz
используется версия taht. Ну, я не уверен в этом; Пожалуйста, поправьте меня, если я ошибаюсь. - Я изменил значение
y
, присвоив ему то же значение, что и x. Я думал, что здесь будет создан новый объект; но я ошибся, он использовал ту же ссылку.
Мои вопросы:
- Использует ли
.net
string interns для каждой строки, которую я использую? - Если да, то не вредит ли производительность?
- Если нет, то как ссылки стали такими же в приведенном выше примере?