使用==还是equals的字符串比较
-
21-09-2019 - |
题
在某些语言(例如C ++),则可以不使用例如==运营商进行字符串比较,将比较字符串对象的地址,而不是字符串本身。然而,在C#中,你可以使用==来比较字符串,它实际上将比较字符串的内容。但也有字符串函数来处理这样的比较,所以我的问题是;你应该?
给定两个串:
string aa = "aa";
string bb = "bb";
如果您对它们进行比较是这样的:
bool areEqual = (aa == bb);
还是应该用平等的功能,像这样的:
bool areEqual = aa.Equals(bb);
有什么区别的技术呢?或合理的论点的最佳做法?
解决方案
我不会使用:
aa.Equals(bb)
除非我知道 aa
不可能的可能的为空。我可以使用:
string.Equals(aa,bb)
但是我主要是使用它,我想用特定StringComparison
模式(不变的,序数,不区分大小写的,等等)中的一个。虽然我也可以用StringComparer
实现,因为它们更容易一点抽象的(例如,通过成Dictionary<string, Foo>
为不区分大小写的顺序字典)。对于一般用途的使用量,
a == b
是细
其他提示
这是操作者的实现:
public static bool operator == (String a, String b) {
return String.Equals(a, b);
}
不会失去任何睡眠超过这一点。
有没有技术差异(除非aa为空)。无论使用哪种更好看你。在我看来,使用操作符重载使得代码更清晰。
使用功能,当你需要(或将来可能需要)的额外的参数(如的CompareTo())
最佳实践的角度来看,我会倾向于总是使用等号()函数字符串比较。这清楚当别人读你的代码,你特别想要的字符串进行比较。
一般来讲,确实==指针相等,而.equals检查是否属性相等。所以,如果你不喜欢的东西。
a = 'a';
b = 'a';
bool c = (a == b);
bool d = (a.Equals(b))
则c应该返回false和d应该是真实的。
不隶属于 StackOverflow