我知道这是特殊情况但是为什么==如果它们的值等于字符串则返回字符串,而不是当它们的引用等于时。它是否与重载运算符有关?
答案 0 :(得分:13)
==
运算符在String
中重载,以执行值相等而不是引用相等。我们的想法是让字符串对程序员更友好,并避免在使用引用相等性来比较它们时出现的错误(在Java中并不常见,尤其是初学者)。
到目前为止,我从来没有需要通过引用比较字符串,说实话。如果您需要这样做,可以使用object.ReferenceEquals()
。
答案 1 :(得分:5)
因为字符串是不可变的,并且运行时可能选择将具有相同内容的任何两个字符串放在同一个引用中。因此,参考比较字符串并没有任何意义。
答案 2 :(得分:2)
在字符串上,==按value
进行比较“尽管string是一个引用类型,但是相等运算符(==和!=)被定义为比较字符串对象的值,而不是引用(7.9.7字符串相等运算符)。这使得对字符串相等性的测试更加直观。“
简而言之,== on strings比较字符串的值,而不是引用,因为C#规范说它应该。
答案 3 :(得分:2)
是。从.NET Reflector这里是String
类的等于运算符重载:
public static bool operator ==(string a, string b)
{
return Equals(a, b);
}
答案 4 :(得分:0)
定义相等运算符(==
和!=
)来比较字符串对象的值,而不是引用。
没有任何情况我必须比较参考文献,但如果你想这样做,那么你可以使用:
object.ReferenceEquals().