C#:CompareTo(String)和Equals(String)有什么区别?

Kit*_* Ho 13 c# string

我想知道,在比较C#中的字符串时?哪种方法适合使用,为什么?

CompareTo()还是Equals()

ken*_*ken 18

来自MSDN:

string.CompareTo:

将此实例与指定的对象或String进行比较,并返回一个整数,该整数指示此实例是否在排序顺序中与指定对象或字符串相同,位于或出现在同一位置.

string.Equals:

确定两个String对象是否具有相同的值.

简而言之,CompareTo用于排序.Equals用于确定平等.


And*_*ber 15

CompareTo()告诉你哪一个,或者一个是否大于/小于另一个,而Equals()只是告诉你它们是否是等价的.

如果您只想知道"它们是否是相同的值",则使用Equals().如果您还需要知道他们如何比较,请使用CompareTo()

int a = 50;
int b = 10;

//if you need to know if they are equal:
if(a.Equals(b)){
    //won't execute
}

//this would check if they are equal, as well
if(a.CompareTo(b) == 0){
    //won't execute
}

//if you need to know if a is bigger than b, specifically:
if(a.CompareTo(b) > 0){
    //will execute
}

//this would check to see if a is less than b
if(a.CompareTo(b) < 0){
    //won't execute
}
Run Code Online (Sandbox Code Playgroud)

最后,请注意,对于原始类型,并不严格需要这些Equals()CompareTo()方法int,因为标准比较运算符已经过载,因此您可以执行以下操作:

//this would check if they are equal, as well
if(a == b){
    //won't execute
}

//if you need to know if a is bigger than b, specifically:
if(a > b){
    //will execute
}

//this would check to see if a is less than b
if(a < b){
    //won't execute
}
Run Code Online (Sandbox Code Playgroud)

最后,你string在问题中提到过.Equals()CompareTo()按照我的描述工作string.请记住,CompareTo()对字符串执行的"比较" 基于字母排序,因此"abcdefg" < "z"

  • 我想,*可能*会有一些微小的性能差异.如果你只需要知道平等,是的; 使用`Equals()`.你的代码中也更清楚地检查`a.Equals(b)`而不是`a.CompareTo(b)== 0` (2认同)

zie*_*mer 5

Equals 将返回一个布尔值来表示相等。

CompareTo将返回一个 int,“小于”为 -1(或任何其他负值),“等于”为 0,“大于”为 1(或任何其他正值)。这种方法对于排序算法很有用。


Jar*_*Par 5

功能CompareTo实际上是功能的超集Equals.一个CompareTo功能使然排序,前,后或等于而Equals功能仅仅规定平等.因此,它实际上可以定义Equals来讲CompareTo

public bool Equals(string other) {
  return 0 == CompareTo(other);
}
Run Code Online (Sandbox Code Playgroud)

  • 虽然这种情况很常见,但情况并非总是如此。一个典型的例子是,“CompareTo()”仅检查对象的名称以确定排序,而“Equals()”也可能检查其他字段。来自 [MSDN](http://msdn.microsoft.com/en-us/library/system.icomparable(v=vs.110).aspx):“当前实例在排序顺序中的位置与由 CompareTo 方法指定的对象。” - 它没有说对象是平等的。 (2认同)