我今天遇到这个,我肯定有一个很好的理由,但为什么 是num2等于num1不一致的情况?长和int等于,等于什么()
long num1 = 1;
int num2 = 1;
num1.Equals(num2); // TRUE - cool.
num2.Equals(num1); // FALSE - hmm?
num2 == num1; // TRUE - ?! Whit?
这是为什么。
我今天遇到这个,我肯定有一个很好的理由,但为什么 是num2等于num1不一致的情况?长和int等于,等于什么()
long num1 = 1;
int num2 = 1;
num1.Equals(num2); // TRUE - cool.
num2.Equals(num1); // FALSE - hmm?
num2 == num1; // TRUE - ?! Whit?
这是为什么。
num1.Equals(num2);
解析到的long.Equals(long)
过载,因为有一个隐含的扩大转换从int
到long
。
num2.Equals(num1);
调用int.Equals(object)
这导致long
NUM1被装箱。由于这不是int
,所以比较返回false。
num2 == num1;
调用重载==
运营商long
这又导致num2
到在比较之前被提升到long
。
long num1 = 1;
int num2 = 1;
MessageBox.Show(num1.Equals(num2).ToString());
MessageBox.Show(num2.Equals((int)num1).ToString());
MessageBox.Show((num2 == num1).ToString());
它的明确铸造只要一个int,使他们平等预期的问题。其他人正在为你铸造。
http://www.codeproject.com/Articles/584128/What-is-the-difference-between-equalsequals-and –
@Daniel:不完全。这里的问题是关于隐含扩展转换的混淆。 – Joey