重写equals方法

来源:互联网 发布:上古世纪精灵捏脸数据 编辑:程序博客网 时间:2024/06/10 05:04

用途

涉及到两个对象的比较的时候,一般需要重写equals方法。

示例

package equals;public class Person {    private String name;    private String age;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getAge() {        return age;    }    public void setAge(String age) {        this.age = age;    }    //重写equals方法    @Override    public boolean equals(Object obj) {        //判断是否为同一对象        if (this == obj)            return true;        //判断是否为空        if (obj == null)            return false;        //判断是否属于同一个类        if (getClass() != obj.getClass())            return false;        //如果类型相同,比较内容        Person other = (Person) obj;        if (age == null) {            if (other.age != null)                return false;        } else if (!age.equals(other.age))            return false;        if (name == null) {            if (other.name != null)                return false;        } else if (!name.equals(other.name))            return false;        return true;    }    //重写hashcode    @Override    public int hashCode() {        final int prime = 31;        int result = 1;        result = prime * result + ((age == null) ? 0 : age.hashCode());        result = prime * result + ((name == null) ? 0 : name.hashCode());        return result;    }}

这里要注意的是重写equals方法一定要重写hashcode方法。因为散列码(hashcode)是由对象导出的一个整数值,它是没有规律的。每个对象基本上对应唯一的一个散列码。因此重写equals与hashcode定义必须一致:如果a.equals(b)返回true,那么a.hashcode()和b.hashcode()必须具有相同的值。

另一种写法

//重写equals方法    @Override    public boolean equals(Object obj) {        if (this == obj)            return true;        if (obj == null)            return false;        if (getClass() != obj.getClass())            return false;        Person other = (Person) obj;        return Objects.equals(age, other.age)&&Objects.equals(name, other.name);    }    //重写hashcode    @Override    public int hashCode() {        return Objects.hash(name,age);    }

equals比较内容的时,直接调用Objects的equals的方法来比较,
返回hashcode时调用Objects的hash方法来组合散列码。这两个方法的实现原理可以直接查看源码,也不复杂,有兴趣的同学可以去看看。

1 0
原创粉丝点击