Предположим, у меня есть строка 'str'. Я хочу интернировать его с помощью метода String.Intern. Мне просто интересно, как именно работает String.Intern в случае, когда значение 'str' еще не интернировано. Описание метода из документации выглядит следующим образом:
Метод Intern использует внутренний пул для поиска строки, равной значению str. Если такая строка существует, возвращается ее ссылка во внутреннем пуле. Если строка не существует, ссылка на строку добавляется во внутренний пул, а затем эта ссылка возвращается.
Но этот отрывок из книги CLR через C# говорит о другом:
Стажер берет строку, получает для нее хэш-код и проверяет внутреннюю хеш-таблицу на соответствие. Если идентичная строка уже существует, возвращается ссылка на уже существующий объект String. Если идентичной строки не существует, создается копия строки, эта копия добавляется во внутреннюю хеш-таблицу и возвращается ссылка на эту копию.
Я предполагаю, что описание из документации является правильным. Итак, во внутренний пул добавляется только ссылка на str без копирования строкового объекта?