重写java类的equals()和hashCode方法

2021-04-26 01:27

阅读:899

Person{
private int id;
private String name;
private String sex;

省略get set

@Override
public boolean equals(Object o) {
//自反性
if (this == o) return true;
//对象为空,则不往下走了 
if (o == null)    return false ; 

//任何对象不等于null,比较是否为同一类型
if (!(o instanceof Person)) return false;
//强制类型转换
Person person = (Person) o;
//比较属性值
return getId() == person.getId() &&
Objects.equals(getName(), person.getName()) &&
Objects.equals(getSex(), person.getSex());
}

@Override
    public int hashCode() {
        int result = name.hashCode();
        result = 17 * result + sex.hashCode();
        result = 17 * result + id.hashCode();
        return result;
    }
}
五、hashcode里的代码该怎么理解?该如何写?

其实有个相对固定的写法,先整理出你判断对象相等的属性,然后取一个尽可能小的正整数(尽可能小时怕最终得到的结果超出了整型int的取数范围),这里我取了17,(好像在JDK源码中哪里看过用的是17),然后计算17*属性的hashcode+其他属性的hashcode,重复步骤

上一篇:冒泡排序

下一篇:python虚拟环境


评论


亲,登录后才可以留言!