字符串驻留备忘

 
下面是个人的练习:
ExpandedBlockStart.gif 代码
        // 字符串拘留练习 by mcjeremy
            
// 声明s1时,拘留池中没有该字符串,因此将它放进去
            
// 放进去后,string.IsIntered(s1),将返回该字符串值
             string  s1  =   " abc123 " ;
            
// 声明s2时,由于拘留池中已经有该字符串存在,因此不再分配内存
            
// s2和s1将指向同一个引用
             string  s2  =   " abc123 " ;
            
// s3背后实际调用的是concat,因此,它是动态创建的。
            
// 因此,会分配新的内存
             string  s3  =  s1  +  s2;
            
// 创建s4时,编译器会优化它,背后调用的是ldstr,因此,会发现拘留池中已经
            
// 有abc123,因此不再分配内存,此时 s1,s2,s4都指向同一个引用
             string  s4  =   " abc "   +   " 123 " ;

            
string  s5  =   " 123 " ;
            
// 创建s6时,背后实际调用的是concat,因此,它是动态创建的。
            
// 因此,会分配新的内存
             string  s6  =   " abc "   +  s5;

            Console.WriteLine(Object.ReferenceEquals(s1, s2)); 
// true
            Console.WriteLine(Object.ReferenceEquals(s1, s3)); // false
            Console.WriteLine(Object.ReferenceEquals(s1, s4)); // true
            Console.WriteLine(Object.ReferenceEquals(s1,s6));  // false
            Console.WriteLine( string .IsInterned(s3)  ??   " Null " );  // null
            Console.WriteLine( string .IsInterned(s1)  ??   " Null " );  // abc123
            Console.WriteLine( string .IsInterned(s6)  ??   " Null " );  // abc123

 

转载于:https://www.cnblogs.com/McJeremy/archive/2010/03/02/1676182.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值