亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索
首頁 > Java > java教程 > 正文

如何在Java中正確重寫equals和hashCode方法

P粉602998670
發(fā)布: 2025-10-16 21:23:01
原創(chuàng)
678人瀏覽過
正確重寫equals和hashCode需遵循規(guī)范:先用==和instanceof判斷引用與類型,再比較關(guān)鍵字段;hashCode應(yīng)包含相同字段并用Objects.hash()實(shí)現(xiàn),確保相等對(duì)象有相同哈希值。

如何在java中正確重寫equals和hashcode方法

在Java中正確重寫equalshashCode方法是保證對(duì)象在集合類(如HashMap、HashSet)中正常工作的關(guān)鍵。這兩個(gè)方法都繼承自Object類,如果重寫不當(dāng),可能導(dǎo)致邏輯錯(cuò)誤或性能問題。

equals方法的正確寫法

equals方法用于判斷兩個(gè)對(duì)象是否“相等”。重寫時(shí)必須遵循Java規(guī)范中的等價(jià)關(guān)系:自反性、對(duì)稱性、傳遞性和一致性,并且與null比較應(yīng)返回false。

以下是重寫equals的標(biāo)準(zhǔn)步驟:

  • 先用==檢查是否是同一個(gè)引用,提高性能
  • 使用instanceof檢查傳入對(duì)象是否為當(dāng)前類類型
  • 將對(duì)象強(qiáng)轉(zhuǎn)為當(dāng)前類型
  • 逐個(gè)比較關(guān)鍵字段(基本類型用==,引用類型建議用Objects.equals()
@Override
public boolean equals(Object obj) {
    if (this == obj) return true;
    if (!(obj instanceof Person)) return false;
    Person other = (Person) obj;
    return Objects.equals(this.name, other.name)
        && this.age == other.age;
}
登錄后復(fù)制

hashCode方法的重寫原則

核心規(guī)則:如果兩個(gè)對(duì)象通過equals判定相等,那么它們的hashCode必須相同。反之則不一定。

立即學(xué)習(xí)Java免費(fèi)學(xué)習(xí)筆記(深入)”;

重寫hashCode時(shí)應(yīng):

  • 包含所有參與equals比較的字段
  • 使用hashCode4簡化實(shí)現(xiàn)
  • 避免包含可變字段,除非你能確保這些字段在對(duì)象作為HashMap鍵后不再改變
@Override
public int hashCode() {
    return Objects.hash(name, age);
}
登錄后復(fù)制

常見錯(cuò)誤與注意事項(xiàng)

開發(fā)者常犯的錯(cuò)誤包括:

降重鳥
降重鳥

要想效果好,就用降重鳥。AI改寫智能降低AIGC率和重復(fù)率。

降重鳥113
查看詳情 降重鳥
  • 只重寫equals而忘了hashCode——這會(huì)導(dǎo)致HashMap行為異常
  • 使用可變字段作為equalshashCode依據(jù),并在對(duì)象加入集合后修改它們
  • equals中使用Object0嚴(yán)格類型檢查,破壞了繼承下的對(duì)稱性(通常用instanceof更合適)
  • 字段比較順序混亂或遺漏

如果你的類是不可變的(如String),重寫這兩個(gè)方法非常安全。如果是可變類,盡量避免將其作為HashMap的key。

使用IDE或工具生成

大多數(shù)IDE(如IntelliJ IDEA、Eclipse)支持自動(dòng)生成equalshashCode方法。也可以使用Lombok的Object4注解簡化代碼:

@EqualsAndHashCode
public class Person {
    private String name;
    private int age;
}
登錄后復(fù)制

但使用注解時(shí)要清楚它默認(rèn)包含所有非靜態(tài)字段,必要時(shí)可通過Object5或Object6指定字段。

基本上就這些。只要保證equalshashCode邏輯一致,不依賴可變狀態(tài),就能避免大部分問題。

以上就是如何在Java中正確重寫equals和hashCode方法的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!

最佳 Windows 性能的頂級(jí)免費(fèi)優(yōu)化軟件
最佳 Windows 性能的頂級(jí)免費(fèi)優(yōu)化軟件

每個(gè)人都需要一臺(tái)速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊(cè)表數(shù)據(jù)和不必要的后臺(tái)進(jìn)程會(huì)占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。

下載
來源:php中文網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn
最新問題
開源免費(fèi)商場(chǎng)系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長!
關(guān)注服務(wù)號(hào) 技術(shù)交流群
PHP中文網(wǎng)訂閱號(hào)
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號(hào)
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)