gpt4 book ai didi

c# - 为什么在 .NET 中没有保留一些相同的字符串?

转载 作者:太空狗 更新时间:2023-10-29 22:15:48 24 4
gpt4 key购买 nike

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} ", object.ReferenceEquals(s1, s6)); //True

字符串 s5 和 s6 都与 s1(“测试”)具有相同的值。基于字符串实习概念,两个语句都必须评估为真。有人可以解释为什么 s5 没有与 s1 相同的引用吗?

最佳答案

对于不是字符串文字的 string 对象调用 ReferenceEquals 应该得到 false

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

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

上面的打印

True True True

Demo.

关于c# - 为什么在 .NET 中没有保留一些相同的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34729430/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com