5

这里发生了什么?

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

Console.WriteLine(x.Equals(zero)); // True
Console.WriteLine(y.Equals(zero)); // False
4

1 回答 1

10

在这里,您调用了两种不同的方法 -Double.Equals(double)Object.Equals(object). 对于第一次调用,int可以隐式转换为double,因此该方法的输入是 adouble并且它会在两个doubles 之间进行相等性检查。但是,对于第二次调用, theint没有转换为 a double,它只是被装箱了。如果您查看Double.Equals(object)反射器中的方法,第一行是:

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

所以它返回 false,因为输入是 boxed int,而不是 boxed double

接得好!

于 2010-05-06T09:43:45.850 回答