2010-05-06 8 views

Odpowiedz

10

Tutaj dzwonisz dwa różne sposoby - Double.Equals(double) i Object.Equals(object). W przypadku pierwszego wywołania int jest niejawnie możliwa do przekształcenia na double, więc dane wejściowe do metody to double i przeprowadza kontrolę równości między dwoma double s. Jednak dla drugiego wywołania int jest , a nie jest rzutowany na double, jest tylko boksowany. Jeśli przyjrzeć się metodzie Double.Equals(object) w reflektorze, pierwsza linia jest:

if (!(obj is double)) 
{ 
    return false; 
} 

więc to powrót fałszywe, jak wejście jest box int, a nie box double.

Dobry połów!