この記事の紹介:
C# の Equals、==、 ReferenceEquals を使用すると、2 つのオブジェクトの参照が等しいかどうかが判断されるため、同じ基本値タイプの場合、 == と Equals() の比較結果は同じになります。値 Type の場合、各判定の前にボックス化操作を実行する必要があるため、つまり、毎回一時オブジェクトが生成されるため、常に false が返されます。
1. == 演算子
1. 既存の != に対応するこの記号は、2 つのオブジェクトが等しいかどうかを比較するために使用できるオーバーロード可能な二項演算子です。
2. 必要に応じて必要な型変換を自動的に実行し、2 つのオブジェクトの値が等しいかどうかに応じて true または false を返します。
3. 参照オブジェクトの場合、その参照を比較します (文字列参照型を除き、文字列は比較値です)
4. 値型の場合、その値を比較します
5. 一部の組み込み参照型は = をオーバーロードします。 = 記号 (文字列など) == をオーバーロードするだけで、2 つの文字列の参照ではなく、2 つの文字列リテラルが等しいかどうかを比較します。例:
int i = 5; int j = 5; Console.WriteLine(i == j);//值类型比较代数值 输出True int m = 6; double n = 6.0; Console.WriteLine(m == n);//类型自动转换并比较数值 输出True object obj1 = new object(); object obj2 = new object(); Console.WriteLine(obj2==obj1);//引用类型比较引用 输出False
2. 2 つのオブジェクトの参照が等しいかどうかを比較するために使用されます。
2. ただし、値型の場合、型が同じ (自動型変換は実行されません)、値も同じ (構造体の各メンバーが同じである必要があります) 場合、Equals は返します。
true、それ以外の場合は false を返します。
3. 参照型の場合、デフォルトの動作は ReferenceEquals と同じです。2 つのオブジェクトが同じ Reference を指している場合にのみ True が返されます。
4. Equals は必要に応じてオーバーロードできます
5. インスタンス
3. ReferenceEquals
1. 2 つのオブジェクトの参照が等しいかどうかを比較します。それはすべて同じです。
2. このメソッドは継承されたクラスでオーバーライドできません。プロトタイプは次のとおりです。 public static bool ReferenceEquals(object objA, object objB);FCL が実装されました。リファレンスが指すメモリアドレスが同じかどうかを比較するものです。
3. 2 つの値の型の場合、ReferenceEquals(object a, object であるため、ReferenceEquals は常に false になります) b) メソッドの後、値の型は新しい参照型のインスタンスにリボックスされます。当然のことながら、参照の等価性はありません。 上記は ==、Equals、ReferenceEquals の違いです。その他の関連記事については、PHP 中国語に注目してください。ウェブサイト (www.php.cn) !