默认情况下,==运算符如何处理字符串? [重复]

|                                                                                                                   这个问题已经在这里有了答案:                                                      
已邀请:
运算符不能被多态覆盖,但是它们可以重载,字符串就是这种情况。重载检查内容是否相等(以序数方式,没有文化敏感性)。因此,例如:
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
注意这是如何在完全相同的对象上进行操作的,但是由于重载解析是在编译时执行的,因此在第二种情况下,编译器不知道调用特定于字符串的运算符。     
是的,默认情况下,当您使用==时,它会检查引用是否相等,但是它会被字符串覆盖,以便检查内容(因为字符串也是不可变的) 这是我喜欢的很棒的文章(作者Jon也在这里:))     
即使System.String类是引用类型(\'string \'是其别名),该类型上的==操作方法也会被覆盖以提供字符串类型内容之间的比较。 它们在您的示例中相等,因为字符串类型的内容相同。     
s2 == s1将为您提供布尔结果,是的。对于.NET编程,我总是发现使用String.Compare更好。     
是的,将C#中的字符串与
==
比较是正常的(但不一定是好的做法)。
String.Compare
是比较可靠的比较方式,也可以照顾到不同的字符集和区分大小写。     

要回复问题请先登录注册