字符串驻留问题

本文通过一个C#示例代码深入探讨了字符串Intern池的工作原理,解释了如何利用object.ReferenceEquals方法来判断两个字符串是否引用相同对象,以及字符串连接操作如何影响Intern池。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,并返回引用。






                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值