5
这是怎么回事?.NET:double.Equals()的奇怪行为()当拳击
int zero = 0;
double x = 0;
object y = x;
Console.WriteLine(x.Equals(zero)); // True
Console.WriteLine(y.Equals(zero)); // False
这是怎么回事?.NET:double.Equals()的奇怪行为()当拳击
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
,因此该方法的输入是double
,它在两个double
之间进行相等性检查。但是,对于第二个电话,int
是而不是被投到double
,它只是被装箱。如果你有反射看看Double.Equals(object)
方法,第一行是:
if (!(obj is double))
{
return false;
}
所以它的返回false,因为输入的是盒装int
,不是盒装double
。
好抓!