2011-04-30 87 views
4

這是代碼::!= VS等於

elem1!=elem2 

相當於這一個?

!elem1.equals(elem2) 

它編譯兩種方式,但我仍然不能確定它...

+10

這是什麼都與仿製藥做對象? – 2011-04-30 16:23:06

+0

我剛剛意識到沒有什麼大聲笑 – bluehallu 2011-04-30 16:46:00

+0

作爲一般的經驗法則,除了基本類型之外,不應該對任何東西使用==和!=運算符。請參閱Oli's和M​​atti的解答。 – 2011-04-30 16:49:01

回答

8

==(和擴展!=)檢查對象標識,也就是說,如果兩個對象引用了相同的實例。 equals檢查更高級別的身份概念,通常是否對象的「值」是相等的。這意味着什麼對於該特定對象實施equals的人。所以他們不是一回事。

這兩個不是同一個東西的常見示例是字符串,其中兩個不同的實例可能具有相同的內容(相同的字符串),在這種情況下,==比較是錯誤的,但equals返回true。

equals(上Object)的默認實現使用==裏面,這樣的結果都是一樣的不覆蓋equals(不包括空值,當然)

7

在一般情況下,沒有他們是不一樣的。第一個版本檢查elem1elem2是否是對同一對象的引用(假設它們不是原始類型)。第二個版本調用特定於類型的方法來檢查兩個(可能不同)的對象是否「相等」,在某種意義上(通常這只是檢查其所有成員字段是否相同)。

我不認爲這與泛型有任何關係。