2015-04-04 34 views
-3

我知道==運算符適用於基元類型的內容比較和對象的參考比較。equals()方法和==運算符之間的關係

同樣,.equals()對象類的方法是用於參考比較字符串和包裝類中的對象和內容比較。

但我從SCJP/OCJP注意到的以下幾點,我無法理解。我查看了網絡,發現只有==.equals之間的區別,但不是如下所述的關係。

  • 如果r1==r2爲真,那麼r1.equals(r2)總是如此。
  • 如果r1==r2爲false,則r1.equals(r2)可能會返回true(或)false。
  • 如果r1.equals(r2)爲真,那麼r1==r2可能會返回true(或)false。
  • 如果r1.equals(r2)爲假,那麼r1==r2總是爲假。
+4

你的問題是什麼? – 2015-04-04 09:32:15

+1

語句「對象類的equals()方法是用於字符串和包裝類的對象和內容比較的參考比較」是錯誤的。有很多類將'equals()'定義爲內容的比較。它的目的是在有意義的地方聲明一個「值」平等(字符串,數字,顏色,集合,座標),並且在作者所關心的地方沒有「價值」平等的情況下默認爲對象身份。 – RealSkeptic 2015-04-04 09:57:13

+0

@RealSkeptic語句「對象類的equals()方法用於引用比較字符串和包裝類中的對象和內容比較」是正確的。可能有其他的類,其中定義了equals(),但是對於OP所提到的是正確的 – 2015-04-04 10:16:48

回答

1

這些要求確保equals方法有人們期待的等價概念的語義和邏輯/數學特性。

因此,我們預計等價是傳遞:如果A等於B和B等於C,那麼A等於C.我們預計對稱:如果A等於B,那麼B等於A.我們預計平等是反身:A等於A.

相關問題