重写equals方法

xiaoxiao2021-02-28  75

用途

涉及到两个对象的比较的时候,一般需要重写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方法来组合散列码。这两个方法的实现原理可以直接查看源码,也不复杂,有兴趣的同学可以去看看。

转载请注明原文地址: https://www.6miu.com/read-45058.html

最新回复(0)