Пожалуйста, подскажите:
Разбираюсь с интернированием в C#, нашел статью
https://habrahabr.ru/post/224281/
Но пока от нее больше вопросов, чем ответов.
Вот есть код, возвращает False
string x = "x";
string x1 = "xxx";
string x2 = x + "xx";
String.Intern(x1);
String.Intern(x2);
Console.WriteLine(object.ReferenceEquals(x1, x2));
Console.ReadLine();
А вот другой код, возвращает True:
string x = "x";
string x1 = "xxx";
string x2 = x + "xx";
Console.WriteLine(object.ReferenceEquals(x1, String.Intern(x2)));
Console.ReadLine();
Я полагал, что раз заранее интернировали x2, то ссылка уже лежит в пуле интернирования и сравнение в первом примере тоже должно быть True. Тем более, что IsInterned(x2) тоже подтверждает, что x2 уже интернирован.
Почему String.Intern() нужно применять именно в момент сравнения?