この次の例では、3 番目の評価は false を返し、すべて正常ですが、4 番目の例は true を返します。
これがどのように機能するかはよくわかりませんが、デフォルトでは、オブジェクトが等しいかどうかの 2 つの参照を比較し、両方が一意のものを指しているObject.Equals
と見なします。これは false を返す必要があります。これは 3 番目の例では行われますが、4 番目の例では行われません。
メソッドが文字列クラスでオーバーライドされているため、2 番目の例で true を返す理由がわかりましたが、4 番目の例では、この文字列をオブジェクトとしてキャストしています。
この場合、それは呼び出されませんか?a
b
.Equals()
Object.Equals
static void Main()
{
// Create two equal but distinct strings
string a = new string(new char[] {'h', 'e', 'l', 'l', 'o'});
string b = new string(new char[] {'h', 'e', 'l', 'l', 'o'});
Console.WriteLine (a == b); // Returns true
Console.WriteLine (a.Equals(b)); // Returns true
// Now let's see what happens with the same tests but
// with variables of type object
object c = a;
object d = b;
Console.WriteLine (c == d); // Returns false
Console.WriteLine (c.Equals(d)); // Returns true
}