MSDN上关于String.Intern的用法写的模棱两可, 我读了一遍感觉很模糊,于是自己写了个程序弄懂下面这句话的意思
The Intern method uses the intern pool to search for a string equal to the value of str. If such a string exists, its reference in the intern pool is returned. If the string does not exist, a reference to str is added to the intern pool, then that reference is returned.
最后一句 “a reference to str is added to the intern pool, then that reference is returned” 更加确切的应当是 “the reference to str is added to the intern pool, then that reference is returned.”
代码如下:
string i1 = new string(new char[] { 'a', 'b', 'c' });
var i2 = String.Copy(i1);
String.Intern(i1);
Console.WriteLine(object.ReferenceEquals(String.Intern(i1), i1));
Console.WriteLine(object.ReferenceEquals(String.Intern(i2), i1));
Console.WriteLine(object.ReferenceEquals(i2, i1));