2015-12-28 41 views
14

我嘗試創建一個允許Java中的元組結構的元組類。元組中兩個元素的一般類型分別是X和Y.我嘗試爲這個類覆蓋正確的等號。Objects.equals和Object.equals

事情是,我知道Object.equals屬於默認值,它仍然基於像「==」這樣的引用進行比較,所以我不太確定我可以使用它。我看着Objects,裏面有一個equals()。這個還是比較引用,還是比較內容?

快速想象return語句,就像這樣:

return Objects.equals(compared.prev, this.prev) && Objects.equals(compared.next, this.next); 

其中prev和next是元組的元素。這會工作嗎?

+2

您可以閱讀內置JRE類的源代碼。 – chrylis

回答

27

區別在於Objects.equals()認爲兩個空值是「相等的」。僞代碼是:

  1. 如果兩個參數都null返回true
  2. 如果恰好一個參數是null返回false
  3. 返回調用所述第一參數的equals()方法傳遞給它的第二個參數
  4. 的結果

此行爲表示它是「無效的」。

+0

點2記錄不正確。代碼是:'return(a == b)|| (a!= null && a.equals(b));'所以它實際上是*如果** first **參數是'null'返回'false' *。如果第二個是'null',那麼''''會被'null'參數調用。如果你實現了'equals'錯誤,這可能會引起人們的興趣,這取決於Objects.equals'太空了,就像我一樣。 –

0

Objects.equals只是調用它的第一個參數.equals方法。在java中,如果你想能夠在你所做的類的實例中測試相等性,那麼你必須重寫equals方法。如果實例類型不覆蓋equals方法,則instance.equals()僅使用==。

+1

不要忘記也重寫'hashCode' – Robert

+2

不,它不這樣做。 – Bohemian

相關問題