A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梁枝武 高级黑马   /  2012-11-13 22:35  /  1649 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 梁枝武 于 2012-11-14 17:30 编辑

String 类中对hashCode进行了复写

public int hashCode() {
int h = hash;
if (h == 0) {
     int off = offset;
     char val[] = value;
     int len = count;

            for (int i = 0; i < len; i++) {
                h = 31*h + val[off++];//这个表达式是什么意思??
            }
            hash = h;
        }
        return h;
    }
还有为什么在定义的类中重写了equals的同时也同时重写hashCode呢??

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

1 个回复

倒序浏览
重写了equals()和hashCode()方法这是为了让元素的唯一性,先比较的是hash值(内存地址).当哈希值一样时才会执行equals()方法.如果equals()方法结果是true的话就说明是同一个元素.像hashSet集合要保证元素的唯一就要这么做
public int hashCode()
{
     return this.name.hashCode()+this.age*17;
}
public boolean equals(Object obj)
{
if(this==obj)
{
return true;
}
if(!(obj instanceof Student))
{
return false;
}
Student s = (Student) obj;
return this.name.equals(s.name) && this.age == s.age;
                                }
                        }

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 正解。

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马