0
我剛剛從一本書中讀到,它表示只要我們覆蓋Object對象的equals()
方法,它的hashCode()
方法也應該被覆蓋,但我不明白爲什麼我們也必須重寫hashCode()
方法。讓我們考慮以下下面的例子:hashCode()和equals()重寫實際上是如何工作的?
public class Employee {
public int employeeId;
public String firstName, lastName;
public int yearStarted;
Employee(){}
Employee(int employeeID){
this.employeeId = employeeID;
}
// @Override
// public int hashCode() {
// return employeeId;
// }
public boolean equals(Object e) {
if(!(e instanceof Employee)){
return false;
}
else {
Employee newEmp = (Employee)e;
return this.employeeId == newEmp.employeeId;
}
}
public static void main(String[] args) {
Employee one = new Employee(101);
if (one.equals(new Employee(101)))
System.out.println("Success");
else
System.out.println("Failure");
}
}
和跑步時,我得到「成功」的結果,而我只覆蓋一個equals()
,但不hashCode()
。那麼當覆蓋equals()
方法的過程流程與hashCode()
有什麼關係時,我們需要覆蓋hashCode()
和equals()
?謝謝!