C#String/String:比较Java中的类似字符串(通过引用)
如何像Java中那样通过引用比较字符串?我知道C#的字符串是通过值与==
进行比较的
Object.ReferenceEquals
也不能很好地工作,因为C#将字符串的现有地址分配给新字符串(如果其内容已经存在于intern池中)
我读过这篇文章,他们建议:
Comparing VALUE and REFERENCE of types
string str = "hello";
string str2 = new StringBuilder().Append("he").Append("llo").ToString();
我希望发生的是这样的事情:
string s1 = "a";
string s2 = "a";
Console.WriteLine(s1 == s2); //False
//Or
Console.WriteLine(Object.ReferenceEquals(s1,s2)); //False
但是上述两个字符串的情况并非如此。如何在不使用StringBuilder
的情况下实现相同的效果
# 1 楼答案
在C#中,字符串是不可变的引用类型。因此,它的行为与值类型类似(例如:这里的示例)。但是字符串生成器纯粹是引用类型
所以,不能使用字符串来比较引用,但可以使用stringbuilder
# 2 楼答案
你可以简单地使用
new
:可运行示例:https://ideone.com/H1O16q
这种方法之所以有效,是因为
new
总是在不进行任何内部化的情况下创建给定类型的新实例。据我所知,每一种主要的OOP语言都是这样运行的# 3 楼答案
可以使用^{} 创建新实例: