为Java对象定义"相同性",通常需要重写equals()方法和hashCode()方法。这两个方法用于比较两个对象是否相等,以及为这些对象生成哈希值。
equals()方法用于比较两个对象是否相等。在重写equals()方法时,需要遵循以下规则:
例如,假设我们有一个表示人的类,我们可以根据姓名和年龄来判断两个人是否相等:
class Person {
private String name;
private int age;
// 省略构造函数和getter/setter方法
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person other = (Person) obj;
return age == other.age && Objects.equals(name, other.name);
}
}
hashCode()方法用于生成对象的哈希值。在重写hashCode()方法时,需要遵循以下规则:
例如,我们可以根据姓名和年龄生成哈希值:
@Override
public int hashCode() {
return Objects.hash(name, age);
}
通过重写equals()和hashCode()方法,我们可以为Java对象定义"相同性",从而在集合(如HashSet和HashMap)中正确地比较和存储对象。