static void Main(string[] args)
{
string str1 = "ABCD1234";
string str2 = "ABCD1234";
string str3 = "ABCD";
string str4 = "1234";
string str5 = "ABCD" + "1234";
string str6 = "ABCD" + str4;
string str7 = str3 + str4;
Console.WriteLine("string str1 = \"ABCD1234\";");
Console.WriteLine("string str2 = \"ABCD1234\";");
Console.WriteLine("string str3 = \"ABCD\";");
Console.WriteLine("string str4 = \"1234\";");
Console.WriteLine("string str5 = \"ABCD\" + \"1234\";");
Console.WriteLine("string str6 = \"ABCD\" + str4;");
Console.WriteLine("string str7 = str3 + str4;");
Console.WriteLine("\nobject.ReferenceEquals(str1, str2) = {0}", object.ReferenceEquals(str1, str2));
Console.WriteLine("object.ReferenceEquals(str1, \"ABCD1234\") = {0}", object.ReferenceEquals(str1,"ABCD1234"));
Console.WriteLine("\nobject.ReferenceEquals(str1, str5) = {0}", object.ReferenceEquals(str1, str5));
Console.WriteLine("object.ReferenceEquals(str1, str6) = {0}", object.ReferenceEquals(str1, str6));
Console.WriteLine("object.ReferenceEquals(str1, str7) = {0}", object.ReferenceEquals(str1, str7));
Console.WriteLine("\nobject.ReferenceEquals(str1, string.Intern(str6)) = {0}", object.ReferenceEquals(str1, string.Intern(str6)));
Console.WriteLine("object.ReferenceEquals(str1, string.Intern(str7)) = {0}", object.ReferenceEquals(str1, string.Intern(str7)));
Console.ReadKey();
}
输出结果:
object.ReferenceEquals(str1, str2) = True
object.ReferenceEquals(str1, "ABCD1234") = True
object.ReferenceEquals(str1, str5) = True
object.ReferenceEquals(str1, str6) = False
object.ReferenceEquals(str1, str7) = False
object.ReferenceEquals(str1, string.Intern(str6)) = True
object.ReferenceEquals(str1, string.Intern(str7)) = True
intern pool(驻留池),对于字符串新建的,新建时要到intern pool搜索,看是否存在与此字符串内容相同的字符串,如果有这返回存在intern pool中字符串的引用,否则将要新建的字符串加入intern pool,并返回引用。