首頁 > Java > java教程 > 你應該在 Java 的 `.equals()` 方法中使用 `instanceof` 或 `getClass()` 嗎?

你應該在 Java 的 `.equals()` 方法中使用 `instanceof` 或 `getClass()` 嗎?

Linda Hamilton
發布: 2024-11-27 01:23:13
原創
266 人瀏覽過

Should You Use `instanceof` or `getClass()` in Java's `.equals()` Method?

在.equals() 實作中優先選擇instanceof 而不是getClass()

在Eclipse 中產生.equals() 方法時,開發人員會看到選擇使用“getClass()”或“instanceof”來比較物件類型。雖然 Eclipse 預設使用“getClass()”,但通常最好選擇“instanceof”。

首選instanceof 的原因

  • 遵守里氏替換原則:使用「getClass()」限制物件相同完全相同類的對象。這違反了里氏替換原則,該原則規定子類別應該在所有方面都可以替換其超類別。因此,在比較不同類別但相同邏輯類型的物件時,使用「getClass()」可能會導致意外行為。
  • 改進的擴展性:透過使用“instanceof”,. equals()方法可以正確識別不同子類別的物件之間的相等性。這允許程式碼具有更大的可擴展性和靈活性,因為可以引入新的子類別而不影響相等比較。

空檢查的最佳實踐

關於null 檢查,在使用「instanceof」時刪除「if (obj == null)」語句確實是一個好習慣。這是因為「instanceof」保證「obj」是相關類別的實例,且空物件不能是任何類別的實例。

支援參數

Josh Bloch,《Effective Java》的作者,提倡在 .equals() 實作中使用「instanceof」。他認為,它確保了對里氏替換原則的正確遵守,並防止依賴 equals 方法的集合中出現令人驚訝的行為。

對此方法的其他支援可以在 Stack Overflow 上的答案和第三個答案中找到Bloch 的書「Effective Java」的章節。

以上是你應該在 Java 的 `.equals()` 方法中使用 `instanceof` 或 `getClass()` 嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板