2012-02-01 8 views

答えて

16

の観点Equalsを定義することが実際に可能だ

指定されたオブジェクトとこのインスタンスを比較または文字列と 返しますこのインスタンスが先行するか後続するかを示す整数。 は、指定されたオブジェクトとソート順の同じ位置に表示されます。 または文字列。

string.Equals

2つの文字列オブジェクトが同じ値を持つかどうかを判断します。

つまり、並べ替えにはCompareToが使用されます。 Equalsは、等価性を決定するために使用されます。

14

CompareTo()は、どちらが大きいか小さいかを示し、Equals()はそれらが同等の値であるかどうかをあなたに伝えます。

あなたが知りたいのは、「彼らは同じ値ですか?」という場合は、Equals()です。あなたはまた、彼らは比較方法を知っておく必要がある場合は、標準の比較演算子がオーバーロードされているので、あなたができるので、これらのEquals()CompareTo()方法を厳密にintのようなプリミティブ型のために必要されていないことに注意して、最後に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 
} 

を使用これらは:

//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 
} 

最後に、あなたの質問にstringと記載しました。 Equals()およびCompareTo()は、私がstringについても説明したように機能する。文字列上のCompareTo()がアルファベット順のソートに基づいているという「比較」を覚えておきましょう。"abcdefg" < "z"

+0

THXからです!したがって、同じ値であるかどうかを確認したい場合、Equals()はCompareTo()よりも優れていますか?何の助言?等しいを使うのは? –

+2

小さなパフォーマンスの違いがあるかもしれません。もしあなたが平等を知る必要があれば、そうです。 'Equals()'を使います。また、あなたのコードで 'a.Equals(b)'が 'a.CompareTo(b)== 0 'よりもはっきりと確認されています –

+1

本当の利点はオブジェクトが' CompareTo'メソッドを提供しないことです。 'Equals'は、ベースの' Object'クラスによって提供されるので、常にそこにあります。 –

4

Equalsは同等のブール値を返します。

CompareToは、「より小さい」には-1(またはその他の負の値)、「等しい」には0、「より大きい」には1(またはその他の正の値)を返します。このメソッドはソートアルゴリズムに便利です。

5

CompareToの機能は、実際にはEqualsという機能のスーパーセットです。 CompareToファンクションは、Equals関数が単に等価を指示している間に、順序付け、前、後、または等価を指示します。

string.CompareTo:従ってそれはMSDNからCompareTo

public bool Equals(string other) { 
    return 0 == CompareTo(other); 
} 
+0

一般的なケースですが、これは必ずしもそうではありません。典型的な例として、 'CompareTo()'はオブジェクトの名前をチェックして順序を決定するだけですが、 'Equals()'は他のフィールドもチェックします。 [MSDN](http://msdn.microsoft.com/en-us/library/system.icomparable(v = vs.110).aspx)から: "この現在のインスタンスは、ソート順の同じ位置にCompareToメソッドで指定されたオブジェクトです。 - オブジェクトが等しいとは言いません。 – larsmoa

0

CompareToメソッドは、オブジェクトのインスタンスとStringオブジェクトのパラメータを比較しています。 等しいメソッドは、両方の値が同じかどうかを判断します。

2つのオブジェクトの値を比較する場合は、CompareToを使用する必要があります。

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

いずれか一方または両方がオブジェクトでない場合は、等号を使用する必要があります。

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

通常の値型の変数にCompareToメソッドを使用すると、不要な型キャスト(ボクシング)が使用されます。

0

平等は比較よりも「もっとふさわしい」ことができますが、その逆はありません。 CompareToは "すべてのオブジェクトが等しい"と言うことができます。 Equalsは "しかし一部はほかのものと同等です"

この例はSystem.Stringです。文字列のEqualsメソッドと==演算子 は、各文字のUnicodeポイント値を比較する序数比較を使用します。 しかし、CompareToメソッドは、カルチャ依存の比較をあまり使用しません。例えば、 では、文字列 "ṻ"と "ǖ"は と同じですが、CompareToによると同じです。

これはC# in a nutshell

関連する問題