Здесь вы вызываете два разных метода - Double.Equals(double)
и Object.Equals(object)
. Для первого вызова int
неявно преобразуется в double
, поэтому входные данные для метода являются double
, и он проверяет равенство между двумя double
с. Однако для второго вызова int
- это , а не , который преобразуется в double
, он только в штучной упаковке. Если вы посмотрите на метод Double.Equals(object)
в отражателе, первая строка:
if (!(obj is double))
{
return false;
}
так что он возвращает false, поскольку входные данные в штучной упаковке int
, а не в штучной упаковке double
.
Хороший улов!