亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

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值轉換為hash值,再加上前面的固定值,這樣就造成了,如果name值在不被修改的情況下,return result返回的永遠是一個固定值,這樣就判定了是否一致;如果name值被修改,那么肯定是不一致的了~~~

1 回復 有任何疑惑可以回復我~
#1

慕粉3620947 提問者

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

木刻雪原 回復 慕粉3620947 提問者

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

慕粉3620947 提問者

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

舉報

0/150
提交
取消

hashCode()中的代碼看不明白

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號