jav*_*red 2 .net c# string equals string-comparison
当我在C#s1 == s2中写入时,两者都声明为字符串,编译器会比较引用或内容吗?即如果==是为string班级重写?
我只是想知道为什么这段代码打印"true":
string s1 = "hello"
string s2 = s1 + " ";
s2 = s2.Trim(); // i expect new object here
Console.WriteLine(s2 == s1);
Run Code Online (Sandbox Code Playgroud)
此外,我还有一些第三方来源,==通常用于字符串比较.这让我很疯狂,因为我几乎从不==用来比较Java中的字符串,现在我无法理解这段代码是如何工作的.
==用于比较C#中的字符串是否正常?
upd:多亏了所有,几乎所有答案都是正确的.总结:
此行为与Java不同,其中String类的"=="比较引用.
另请参阅为什么字符串不能比较引用?
在我个人看来语言不应该允许覆盖或重载==运算符,因为它使它像c ++一样困难:)
操作符不能以多态方式覆盖,但它们可以重载,这就是字符串的情况.过载检查内容相等(以序数方式,没有文化敏感性).所以,例如:
string s1 = "hello";
string s2 = (s1 + " ").Trim();
object o1 = s1;
object o2 = s2;
Console.WriteLine(s1 == s2); // True - calls overloaded ==(string, string)
Console.WriteLine(o1 == o2); // False - compares by reference
Run Code Online (Sandbox Code Playgroud)
注意它是如何在完全相同的对象上操作的,但是因为重载解析是在编译时执行的,所以在第二种情况下编译器不知道调用特定于字符串的操作符.