2016-06-21 78 views
-1

我今天遇到這個,我肯定有一個很好的理由,但爲什麼 是num2等於num1不一致的情況?長和int等於,等於什麼()

long num1 = 1; 
int num2 = 1; 

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

這是爲什麼。

+0

http://www.codeproject.com/Articles/584128/What-is-the-difference-between-equalsequals-and –

+2

@Daniel:不完全。這裏的問題是關於隱含擴展轉換的混淆。 – Joey

回答

7
num1.Equals(num2); 

解析到的long.Equals(long)過載,因爲有一個隱含的擴大轉換從intlong

num2.Equals(num1); 

調用int.Equals(object)這導致long NUM1被裝箱。由於這不是int,所以比較返回false。

num2 == num1; 

調用重載==運營商long這又導致num2到在比較之前被提升到long

+0

絕對是,對於價值類型來說,它不僅具有相似的價值,而且類型也必須相同(或)應該被隱式轉換。 – Rahul

+0

@Rahul它與它的值或引用類型無關。幾乎所有(良好)相等的實現都被定義爲只對相同類型的對象返回true。不這樣做通常是執行「Equals」中的一個錯誤。 – Servy

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()); 

它的明確鑄造只要一個int,使他們平等預期的問題。其他人正在爲你鑄造。

相關問題