第二个 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)