我今天遇到这个,我相信有一个很好的理由,但为什么呢 num2等于num1不一致吗?
long num1 = 1;
int num2 = 1;
num1.Equals(num2); // TRUE - cool.
num2.Equals(num1); // FALSE - hmm?
num2 == num1; // TRUE - ?! Whit?
为什么会这样。
答案 0 :(得分:9)
num1.Equals(num2);
解析为long.Equals(long)
的重载,因为从int
到long
的隐式扩展转换。
num2.Equals(num1);
调用int.Equals(object)
会导致long
num1被装箱。由于这不是int
,因此比较返回false。
num2 == num1;
为==
调用重载的long
运算符,这会再次导致num2
在被比较之前被提升为long
。
答案 1 :(得分:0)
long num1 = 1;
int num2 = 1;
MessageBox.Show(num1.Equals(num2).ToString());
MessageBox.Show(num2.Equals((int)num1).ToString());
MessageBox.Show((num2 == num1).ToString());
这是将long显式地转换为int以使它们与预期相等的问题。其他人正在为你做演员。