这里发生了什么?
int zero = 0;
double x = 0;
object y = x;
Console.WriteLine(x.Equals(zero)); // True
Console.WriteLine(y.Equals(zero)); // False
这里发生了什么?
int zero = 0;
double x = 0;
object y = x;
Console.WriteLine(x.Equals(zero)); // True
Console.WriteLine(y.Equals(zero)); // False
在这里,您调用了两种不同的方法 -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。
接得好!