@mletov

Как же все-таки работает интернирование в C#?

Пожалуйста, подскажите:

Разбираюсь с интернированием в 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() нужно применять именно в момент сравнения?
  • Вопрос задан
  • 187 просмотров
Пригласить эксперта
Ответы на вопрос 1
NightmareZz
@NightmareZz
Нищий разработчик из Симферополя
Всё дело в том, что String.Intern(x2) как раз и возвращает ссылку на интернированную строку, не важно, где ты функцию вызываешь. А вот в x2 в обоих примерах так и останется ссылка на НЕ интернированную строку.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы