正确重写equals()和hashCode()方法

来源:互联网 发布:欧洲旅游价格知乎 编辑:程序博客网 时间:2024/05/21 09:02

比较两个Java对象时, 如果相同的对象有不同的hashCode,比较操作会出现意想不到的结果,为了避免这种问题,要同时复写equals方法和hashCode方法,而不要只写其中一个。

class People {    String name;    int age;    public People(String name, int age) {        this.age = age;        this.name = name;    }    @Override    public boolean equals(Object obj) {        if (obj == this) {            return true;        }        if (!(obj instanceof People)) {            return false;        }        People people = (People) obj;        return people.name.equals(name) && people.age == age;    }    @Override    public int hashCode() {        int result = 17;        result = 31 * result + name.hashCode();        result = 31 * result + age;        return result;    }}public class Main {    public static void main(String[] args) {        People people1 = new People("程", 22);        People people2 = new People("程", 22);                People people3 = new People("程", 13);        System.out.println(people1.equals(people2));        System.out.println(people1.equals(people3));    }}

运行结果

truefalse
0 0
原创粉丝点击