.NET: Странное поведение дважды. Равняется () при упаковке

Что продолжается здесь?

int zero = 0;
double x = 0;
object y = x;

Console.WriteLine(x.Equals(zero)); // True
Console.WriteLine(y.Equals(zero)); // False
5
задан Vilx- 6 May 2010 в 09:37
поделиться

1 ответ

Здесь вы вызываете два разных метода - Double.Equals (двойной) и Object.Equals (объект) .Для первого вызова int неявно конвертируется в double , поэтому входом в метод является double , и он выполняет проверку равенства между двумя ] двойной с. Однако для второго вызова int не приведение к double , это только упаковка. Если вы посмотрите на метод Double.Equals (object) в отражателе, первая строка будет:

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

, поэтому он возвращает false, поскольку входные данные представляют собой упакованный int , не коробочный двойной .

Хороший улов!

10
ответ дан 13 December 2019 в 22:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: