我已经看到一些开发人员在POJO对象中覆盖equals和hashcode,这些对象实现了serializable,而其他人没有 . 关于在实现可序列化时我是否应该在POJO中覆盖equals和hashcode,我很困惑?我的POJO就像一个人对象,我想将它保存到Redis数据库 .
import java.io.Serializable;
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private int id;
private String name;
private int age;
public Person() { }
public Person(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString() {
return id +" - " + name + " - " + age;
}
@Override
public boolean equals(final Object obj) {
if (obj == null) {
return false;
}
final Person person = (Person) obj;
if (this == person) {
return true;
} else {
return (this.name.equals(person.name) && this.age == person.age);
}
}
@Override
public int hashCode() {
int hashno = 7;
hashno = 13 * hashno + (name == null ? 0 : name.hashCode());
return hashno;
}
}
1 回答
没有严格的规则,类实现
serializable
需要覆盖equals()
和hashCode()
If you Override Only hashcode
如果只覆盖哈希码方法,则不会发生任何事情 . 因为它总是为每个对象返回新的hashCode作为Object类 .
If you Override only equals
如果你只覆盖相等的方法,a.equals(b)为真,这意味着a和b的hashCode必须相同但不会发生
这取决于用例和开发人员覆盖
.equals()
方法,这样便于检查两个人对象是否具有相同的内容始终建议在覆盖equals()的每个类中重写hashCode() .
From Google 无法覆盖哈希码here