equals()和hashCode()方法如何生成

2018-10-17 09:20 更新

本節(jié)介紹如何在 IntelliJ IDEA 中生成 equals() 和 hashCode() 方法。

對(duì)于 IntelliJ IDEA 中的 equals() 和 hashCode() 我們或許可以這樣理解:equals() 相等的兩個(gè)對(duì)象,hashcode()一定相等,equals()不相等的兩個(gè)對(duì)象,卻并不能證明他們的 hashcode() 不相等。換句話說(shuō),equals() 方法不相等的兩個(gè)對(duì)象,hashCode() 有可能相等。

讓我們來(lái)看兩個(gè)代碼:

public boolean equals(Object obj)

如果作為參數(shù)傳遞給它的對(duì)象等于調(diào)用此方法的對(duì)象, 則此方法返回 true。

public int hashCode()

此方法返回調(diào)用此方法的對(duì)象的整數(shù)哈希碼值。

tip:如果類中已經(jīng)存在方法equals()和hashCode()方法,則在繼續(xù)操作之前,系統(tǒng)將提示您刪除它們。

IntelliJ IDEA 生成 equals()和 hashCode()方法

要生成 equals() 和 hashCode() 方法,請(qǐng)按照下列步驟操作:

  1. 執(zhí)行以下操作之一:
    • 在主菜單上選擇代碼| 生成(Code | Generate)。
    • 右鍵單擊編輯器,然后在上下文菜單中選擇 "生成(Generate)"。
    • 按 Alt+Insert。
  2. 從編輯器打開的彈出列表中選擇 equals()和 hashCode() 選項(xiàng)以打開“生成 equals()和 hashCode()”向?qū)А?/li>
  3. 按照向?qū)У牟襟E操作:
    • 在向?qū)У牡谝豁?yè)上,選擇或清除復(fù)選框以接受子類,并在代碼生成期間使用 getter。也可以從 "模板" 下拉列表中選擇快速模板來(lái)生成代碼或創(chuàng)建自定義模板。
    • 在向?qū)У牡诙?yè)上,選擇應(yīng)用于確定相等性的字段,然后單擊“下一步”。
    • 在第三頁(yè)上,選擇要生成哈希代碼的字段。
      請(qǐng)注意,只有 equals() 方法中包含的字段才能參與創(chuàng)建哈希碼代碼。默認(rèn)情況下,所有這些字段都被選中,但是如果需要,您可以取消選擇它們。
      點(diǎn)擊“下一步”。
    • 在向?qū)У牡谒捻?yè)上,選擇包含非空值的字段。這個(gè)可選的 li 幫助生成的代碼避免了對(duì) nul l的檢查,從而提高性能。點(diǎn)擊“完成”。

如下示例:

public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null
	    || getClass() != o.getClass()) return false;
        FixedRateCurrencyExchangeService that = (FixedRateCurrencyExchangeService) o;
    if (Double.compare(that.rate, rate) != 0) return false;
    return true;
}

public int hashCode() {
    long temp = rate != +0.0d ? Double.doubleToLongBits(rate) : 0L;
    return int (temp ^ (temp >>> 32));
}
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)