首頁 > Java > java教程 > Java 的 `.equals()` 方法中的 `getClass()` 與 `instanceof` 哪個比較好?

Java 的 `.equals()` 方法中的 `getClass()` 與 `instanceof` 哪個比較好?

Barbara Streisand
發布: 2024-11-25 03:38:11
原創
675 人瀏覽過

`getClass()` vs. `instanceof` in Java's `.equals()` Method: Which is Better?

在產生 .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中文網其他相關文章!

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