Интернирование строк

В приведенном ниже коде я проверяю равенство ссылок на объекты.

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используется в тахт версии. Ну, я не уверен в этом; Пожалуйста, поправьте меня, если я ошибаюсь.
  • Я изменил значение y, присвоив ему то же значение, что и x. Я думал, что здесь будет создан новый объект; но я ошибся, он использовал ту же ссылку.

Мои вопросы:

  • Использует ли .netстроковые стажеры для каждой строки, которую я использую?
  • Если да, то не вредит ли это производительности?
  • Если нет, то как ссылки стали такими же в приведенном выше примере?

11
задан Omar 17 August 2012 в 10:43
поделиться