Java 的 `.equals()` 方法中的 `getClass()` 與 `instanceof` 哪個比較好?
在產生 .equals() 時 getClass() 與 instanceof 的首選用法
使用 Eclipse 的程式碼產生器產生 .equals()和.hashCode(),您可能會遇到使用“instanceof”進行類型比較的選項或.getClass()。預設選擇是 .getClass(),但本文探討使用 .getClass() 相對於 instanceof 是否有任何優點。
不使用instanceof 的比較:
if (obj == null) return false; if (getClass() != obj.getClass()) return false;
比較使用instanceof:
if (obj == null) return false; if (!(obj instanceof MyClass)) return false;
instanceof 的論證
著名Java 專家Josh Bloch 同意這種方法,並引用了以下推理:- 使用getClass()將對象相等性限制為僅屬於相同類別的對象,並且在執行時間類型。
- 如果使用無害的方法擴展一個類,則儘管基本屬性相同,子類和超類的對象可能會被錯誤地視為不相等。
- 這可能違反了里氏替換原則導致意外的行為。
- Java 的集合框架(例如 HashTable)嚴重依賴 equals 方法。使用 .getClass(),當使用子類別實例查詢時,由於它們感知到的不平等,可能無法從雜湊表中檢索超類別中的物件。
其他資源
- [所以答案](https://stackoverflow.com/questions/2810849/what-is-the-performance-complexity-of-using-instanceof-k eyword-in-java)
- [有效的Java章節3](https://books.google.com/books?id=XY6a0H0G7LsC&pg=SA3-PA34&lpg=SA3-PA34&dq=喬許‧布洛赫getClass 實例equals&source=bl&ots=1P2j4a8S-Q&sig=ACfU3U0pWgTLs2MNGhf5Nq4Giq6hYH8MgQ&hl=en)
以上是Java 的 `.equals()` 方法中的 `getClass()` 與 `instanceof` 哪個比較好?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

在使用IntelliJIDEAUltimate版本啟動Spring...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...

在使用TKMyBatis進行數據庫查詢時,如何優雅地獲取實體類變量名以構建查詢條件,是一個常見的難題。本文將針...
