long和int相等,Equals()发生了什么

时间:2016-06-21 18:30:01

标签: c#

我今天遇到这个,我相信有一个很好的理由,但为什么呢 num2等于num1不一致吗?

long num1 = 1;
int num2 = 1;

num1.Equals(num2);  // TRUE - cool.
num2.Equals(num1); // FALSE - hmm?
num2 == num1; // TRUE - ?! Whit?

为什么会这样。

2 个答案:

答案 0 :(得分:9)

num1.Equals(num2);

解析为long.Equals(long)的重载,因为从intlong的隐式扩展转换。

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以使它们与预期相等的问题。其他人正在为你做演员。