加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为什么某些相同的字符串不在.NET中实现?

发布时间:2020-12-15 19:26:40 所属栏目:百科 来源:网络整理
导读:string s1 = "test";string s5 = s1.Substring(0,3)+"t"; string s6 = s1.Substring(0,4)+""; Console.WriteLine("{0} ",object.ReferenceEquals(s1,s5)); //FalseConsole.WriteLine("{0} ",s6)); //True 字符串s5和s6都具有与s1相同的值(“test”).基于字符
string s1 = "test";
string s5 = s1.Substring(0,3)+"t"; 
string s6 = s1.Substring(0,4)+"";   
Console.WriteLine("{0} ",object.ReferenceEquals(s1,s5)); //False
Console.WriteLine("{0} ",s6)); //True

字符串s5和s6都具有与s1相同的值(“test”).基于字符串实习概念,这两个语句必须已评估为true.有人可以解释为什么s5没有与s1相同的参考?

解决方法

对于不是字符串文字的字符串对象,对于ReferenceEquals的调用应该为false.

本质上,最后一行按巧合打印True:当您传递空字符串进行字符串连接时,库优化会识别出这一点,并返回原始字符串.这与实习没有任何关系,因为从控制台读取的字符串或以任何其他方式构造的字符串也会发生同样的事情:

var s1 = Console.ReadLine();
var s2 = s1+"";
var s3 = ""+s1;
Console.WriteLine(
    "{0} {1} {2}",s2),s3),object.ReferenceEquals(s2,s3)
);

以上打印

True True True

Demo.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读