Een float
is alleen gelijk aan een andere float
en een int
is alleen gelijk aan een andere int
. De enige regels die true
retourneren zijn deze:
Console.WriteLine(f.Equals(i));
Console.WriteLine(i == f);
In beide gevallen is er een impliciete conversie van de waarde van i
in float
, dus ze zijn gelijk aan:
Console.WriteLine(f.Equals((float) i));
Console.WriteLine((float) i == f);
Deze conversies zijn slechts normale conversies die nodig zijn voor de overbelastingsresolutie van methoden en operators.
Geen van de rest van de regels heeft betrekking op die impliciete conversie, dus vergelijken ze de twee verschillende typen, wat een resultaat van false
oplevert, zelfs als het is door te vergelijken met de waarde ( wat het geval is met alle is gelijk aan
oproepen). Dat is de reden waarom het gebruik van Gelijk aan
op de ingevoegde int
waarden retourneert true
, omdat dat twee waarden van hetzelfde type vergelijkt , op waarde .
In dit geval:
Console.WriteLine(obi == obf);
het is niet eens proberen om numerieke waarden te vergelijken - het is het vergelijken van de referenties voor de ingesloten objecten. Omdat er twee verschillende referenties zijn, is het resultaat false
- en zou het zelfs zijn als beide waarden van het type int
zouden zijn.