为了账号安全,请及时绑定邮箱和手机立即绑定

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
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号