使用==或Equals进行字符串比较

在某些语言(例如C ++)中,您不能使用==等运算符进行字符串比较,因为它会比较字符串对象的地址,而不是字符串本身。 但是,在C#中,您可以使用==来比较字符串,它实际上会比较字符串的内容。 但是也有字符串函数来处理这种比较,所以我的问题是; 你应该?

给出两个字符串:

string aa = "aa"; string bb = "bb"; 

你应该像这样比较它们:

 bool areEqual = (aa == bb); 

或者你应该使用Equal函数,如下所示:

 bool areEqual = aa.Equals(bb); 

反正有技术差异吗? 或者最佳实践的合理论据?

我不会用:

 aa.Equals(bb) 

除非我知道 aa 不可能是null。 我可能会用:

 string.Equals(aa,bb) 

但我主要使用它我想使用一种特定的StringComparison模式(不变量,序数,不区分大小写等)。 虽然我也可以使用StringComparer实现,因为它们更容易抽象(例如,传递给Dictionary以获取不区分大小写的序数字典)。 对于一般用途,

 a == b 

很好。

这是运营商的实施:

  public static bool operator == (String a, String b) { return String.Equals(a, b); } 

不要为此失眠。

没有技术差异(除非aa为空)。 使用任何看起来更好的东西。 在我看来,使用运算符重载使代码更清晰。

在需要(或将来可能需要)其他参数时使用函数(如在CompareTo()中)

最佳实践,我倾向于总是使用Equals()函数进行字符串比较。 当其他人读取您特别想要比较字符串的代码时,这一点就很清楚了。

一般来说,==做指针相等,而.equals检查属性是否相等。 所以,如果你做了类似的事情

 a = 'a'; b = 'a'; bool c = (a == b); bool d = (a.Equals(b)) 

那么c应该返回false而d应该是true。