我今天遇到這個,我肯定有一個很好的理由,但爲什麼 是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