第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

為何要重寫Course下的hashCode()和equals()方法?重寫方法的代碼是自動(dòng)生成的且只字未改。

重寫的hashCode()和equals()方法,區(qū)別只是方法所在的位置不同,方法原來(lái)的代碼在父類Object類,而重寫后方法在子類Course中,既然代碼沒有作任何改動(dòng)為何運(yùn)行結(jié)果會(huì)不一樣呢?

看了很多類似問題,但沒能看得懂呢,能否通俗易懂的講解下?

正在回答

3 回答

感覺和這個(gè)問題的原因類似,可以參考理解一下

在hibernate中,它認(rèn)為2個(gè)對(duì)象只要equals返回true,那么hashCode一定相等。 但是實(shí)際情況呢?

User u1 = new User(“張三”);

User u2 = new User(“張三”);

由于我們重寫了User的equals方法,所以 u1.equals(u2);返回true 但是,User并沒有重寫hashCode方法,它用的是Object類的hashCode方法,所以 u1.hashCode = 31050006 u2.hashCode = 31587890 兩者的hashCode并不相等。違背了hibernate的原則 由此hibernate會(huì)產(chǎn)生錯(cuò)誤判斷,又以為它們不是同一個(gè)對(duì)象,因此我們還得重寫User 的hashCode方法。如何重寫hashCode方法呢?

哈希碼要完成這么一件事,首先要保證如果equlas出來(lái)的結(jié)果相等,那么hashCode也相等。像上面的u1和u2,由于名字都是“張三”,所以應(yīng)該返回相同的hashCode。所以我們可以想一個(gè)辦法。讓User的[2]??哈希碼返回User里面name字段的哈希碼,這樣就保證,名字相同的人,不但equlas方法相同,而且hashCode相等。 那么User類就變成

public class User{

private String userName;

//覆蓋Object里的equals方法

public boolean equals(Object arg0){

if(!(arg0 instanceof User)){

return false;

}

User user = (User)arg0;

//如果名字相同,則表示屬于同一個(gè)對(duì)象。

if (user.getName().equals(this.getName)){

return true;

}else{

return false;

}

}

//覆蓋Object里的hashCode方法

public int hashCode() {

return name.hashCode();//返回名字的哈希碼。

}

}

這樣可以保證hibernate根據(jù)我們自己的需求來(lái)判斷重復(fù)對(duì)象

(以上引自百度百科https://baike.baidu.com/item/%E5%93%88%E5%B8%8C%E7%A0%81/5035512?fr=aladdin,如侵權(quán)則刪除)

2 回復(fù) 有任何疑惑可以回復(fù)我~
#1

慕勒9549435 提問者

非常感謝!
2018-02-27 回復(fù) 有任何疑惑可以回復(fù)我~

有一點(diǎn)是可以肯定的,雖然沒有改動(dòng),但肯定和Object類中的方法體是不一樣的。至于為什么會(huì)自動(dòng)重寫成那樣,我也不清楚。

1 回復(fù) 有任何疑惑可以回復(fù)我~

?兄弟去看看這個(gè),這個(gè)要看個(gè)人理解,,,http://huaxia524151.iteye.com/blog/729074

0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消

為何要重寫Course下的hashCode()和equals()方法?重寫方法的代碼是自動(dòng)生成的且只字未改。

我要回答 關(guān)注問題
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)