Vil*_*lx- 5 .net comparison boxing
这里发生了什么?
int zero = 0;
double x = 0;
object y = x;
Console.WriteLine(x.Equals(zero)); // True
Console.WriteLine(y.Equals(zero)); // False
Run Code Online (Sandbox Code Playgroud)
the*_*oop 10
在这里,你要调用两种不同的方法 - Double.Equals(double)和Object.Equals(object).对于第一个调用,int可以隐式转换为double,因此方法的输入是a double,它在两个doubles 之间进行相等性检查.但是,对于第二个调用,int它不会被转换为a double,它只是被装箱.如果您看一下Double.Equals(object)反射器中的方法,第一行是:
if (!(obj is double))
{
return false;
}
Run Code Online (Sandbox Code Playgroud)
所以它返回false,因为输入是盒装的int,而不是盒装的double.
接得好!