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

时间:2009-12-28 10:10:04

标签: c# .net string string-comparison

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

给出两个字符串:

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

你应该像这样比较它们:

bool areEqual = (aa == bb); 

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

bool areEqual = aa.Equals(bb); 

无论如何还有技术差异吗?或者最佳实践的合理论据?

5 个答案:

答案 0 :(得分:24)

这是运营商的实施:

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

不要因此而失眠。

答案 1 :(得分:23)

我不会用:

aa.Equals(bb)

除非我知道 aa 可能 。我可以使用:

string.Equals(aa,bb)

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

a == b

很好。

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:-3)

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

这样的事情
a = 'a';
b = 'a';
bool c = (a == b);
bool d = (a.Equals(b))

然后c应该返回false而d应该是true。