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

时间:2012-02-01 01:54:15

标签: c# string

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

CompareTo()Equals()

6 个答案:

答案 0 :(得分:18)

来自MSDN

<强> string.CompareTo

  

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

<强> string.Equals

  

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

简而言之,CompareTo用于排序。 Equals用于确定相等。

答案 1 :(得分: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
}

最后请注意,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
}

最后,您在提问时提到了stringEquals()CompareTo()工作正如我对string所描述的那样。请记住,CompareTo()对字符串的“比较”基于字母排序,因此"abcdefg" < "z"

答案 2 :(得分:5)

CompareTo中的功能实际上是Equals功能的超集。 CompareTo函数指示在Equals函数仅指示相等性之前,之后或等于的排序。因此,实际上可以根据Equals

来定义CompareTo
public bool Equals(string other) {
  return 0 == CompareTo(other);
}

答案 3 :(得分:4)

Equals将返回相等的布尔值。

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

答案 4 :(得分:0)

平等可以比比较“更加苛刻”,但反之亦然。 比较可以说“所有对象都是平等的” 虽然Equals说“但有些人比其他人更平等!”

这样的一个例子是System.String。 String的Equals方法和==运算符 使用序数比较,它比较每个字符的Unicode点值。 然而,它的CompareTo方法使用了一种不那么繁琐的文化依赖比较。上 大多数计算机,例如,字符串“ṻ”和“ǖ”根据不同而不同 等于,但根据CompareTo相同。

这是C# in a nutshell

答案 5 :(得分:-1)

CompareTo方法是将对象的实例与String对象的参数进行比较。 Equals方法确定两者的值是否相同。

比较两个对象的值时应使用CompareTo。

String str1 = "abc";
String str2 = "def"
if(strq.CompareTo(str2) //

当其中一个或两个都不是对象时,应使用等于。

string str1 = "abc";
if(str1.Equals("abc") //

如果对正常值类型变量使用CompareTo方法,它将使用类型转换(装箱),这是不必要的。