float
は別の float
にのみ等しく、 int
は別の int
と同じです。 true
を返す行は次のものだけです:
Console.WriteLine(f.Equals(i));
Console.WriteLine(i == f);
どちらの場合も、 i
の値は float
に暗黙的に変換されます。
Console.WriteLine(f.Equals((float) i));
Console.WriteLine((float) i == f);
これらの変換は、メソッドや演算子のオーバーロード解決に必要な通常の変換です。
残りの行には暗黙の変換が含まれていないので、2つの異なる型を比較しているので、 値で比較しても false
すべての Equals
呼び出しの場合です)。そのため、ボックス化された int
値で Equals
を使用すると true
、価値によって
この場合:
Console.WriteLine(obi == obf);
数値化された値を比較しようとしていません。ボックス化されたオブジェクトの参照を比較しています。 2つの異なる参照があるため、結果は false
です。両方の値が int
型であっても結果は同じです。