每个对象都有一个预定义的equals()方法,用于语义相等测试。
但是,为了使它对我们的类有效,我们需要重写它并检查我们需要的条件。
生成equals()方法有一种简单而快速的方法,而不是手动编写它。
在类中单击鼠标右键,转到Source->Generate hashCode()和equals()。。。
这将自动创建必要的方法。
class Animal {
String name;
Animal(String n) {
name = n;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Animal other = (Animal) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
自动生成的hashCode()方法用于确定在内部存储对象的位置。无论何时实现equals,都必须同时实现hashCode。
我们可以使用equals方法再次运行测试:
public static void main(String[ ] args) {
Animal a1 = new Animal("Robby");
Animal a2 = new Animal("Robby");
System.out.println(a1.equals(a2));
}
// 输出 true
可以使用同一菜单生成其他有用的方法,例如类属性的getter和setter。