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

為了賬號安全,請及時綁定郵箱和手機立即綁定

hashCode()中的代碼看不明白

??? @Override
?? ?public int hashCode() {
?? ??? ?final int prime = 31;
?? ??? ?int result = 1;
?? ??? ?result = prime * result + ((name == null) ? 0 : name.hashCode());
?? ??? ?return result;
?? ?}

這段代碼為什么要判斷 (name==null) 的值并返回 0 或者 name.hashCode() 再加上 result*31 ?

正在回答

1 回答

因為如果name==null 則返回0;那么result就是一個固定值;

name.hashCode()則是將name值轉(zhuǎn)換為hash值,再加上前面的固定值,這樣就造成了,如果name值在不被修改的情況下,return result返回的永遠是一個固定值,這樣就判定了是否一致;如果name值被修改,那么肯定是不一致的了~~~

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

慕粉3620947 提問者

既然name值在不被修改的情況下,name.hashCode()返回的永遠是一個固定值,只用name.hashCode()就可以判斷是否一致. 那為什么要加上prime*result呢. 像下面這樣重寫Course的hashCode()可否 @Override ?public int hashCode() { return name.hashCode(); }
2016-07-21 回復(fù) 有任何疑惑可以回復(fù)我~
#2

木刻雪原 回復(fù) 慕粉3620947 提問者

31是一個素數(shù),當然也可以用其它的,只是一個默認的傳統(tǒng),用31*1+hashcode是因為jvm虛擬機可以對結(jié)果值做優(yōu)化,至于優(yōu)化的具體實現(xiàn)都是虛擬機完成的,這個只要遵循即可,至于jvm是怎樣完成的,我就不清楚了~
2016-07-21 回復(fù) 有任何疑惑可以回復(fù)我~
#3

慕粉3620947 提問者

非常感謝!
2016-07-21 回復(fù) 有任何疑惑可以回復(fù)我~

舉報

0/150
提交
取消

hashCode()中的代碼看不明白

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

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

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