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
。
好抓!