这里发生了什么?
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
并且它会在两个double
s 之间进行相等性检查。但是,对于第二次调用, theint
没有被转换为 a double
,它只是被装箱了。如果您查看Double.Equals(object)
反射器中的方法,第一行是:
if (!(obj is double))
{
return false;
}
所以它返回 false,因为输入是 boxed int
,而不是 boxed double
。
接得好!