Стринг интернирующий?

Второй вызов ReferenceEquals возвращает false. Почему строка в s4 не интернирована? (Меня не волнует преимущество StringBuilder перед конкатенацией строк.)

string s1 = "tom";
string s2 = "tom";


Console.Write(object.ReferenceEquals(s2, s1)); //true

string s3 = "tom";
string s4 = "to";
s4 += "m";

Console.Write(object.ReferenceEquals(s3, s4)); //false

Когда я делаю String.Intern(s4);, я все равно получаю ложь.

Здесь и s3, и s4 интернированы, но их ссылки не равны?

string s3 = "tom";
string s4 = "to";
s4 += "m";
String.Intern(s4);

Console.WriteLine(s3 == s4); //true
Console.WriteLine(object.ReferenceEquals(s3, s4)); //false
Console.WriteLine(string.IsInterned(s3) != null);  //true (s3 is interned)
Console.WriteLine(string.IsInterned(s4) != null);  //true (s4 is interned)
8
задан Olivier Rogier 7 October 2019 в 17:01
поделиться