我還沒有覆蓋多的hashCode()和的equals()方法所以我可能是錯的 我的問題是最後一行,其中爲什麼這個Java代碼編譯成功
dep1.equals(emp2)
是被編譯成功(爲什麼)(我期待,因爲他們有不同類型的編譯錯誤),我得到以下
15 15 false
編譯後在那裏我期待15 15真正因爲我checki ng方法中的哈希碼。
class Employee {
private String name;
private int id;
public Employee(String name, int id) {
this.name = name;
this.id = id;
}
public int hashCode() {
return this.id;
}
public boolean equals(Employee employee) {
return this.hashCode() == employee.hashCode();
}
public int getEmployeeId() {
return this.id;
}
}
class Department {
private String name;
private int id;
public Department(String name, int id) {
this.name = name;
this.id = id;
}
public int hashCode() {
return this.id;
}
public boolean equals(Department department) {
return this.hashCode() == department.hashCode();
}
public int getDepartmentId() {
return this.id;
}
}
public class JavaCollections {
public static void main(String args[]) {
Employee emp2 = new Employee("Second Employee", 15);
Department dep1 = new Department("Department One", 15);
System.out.println(dep1.hashCode()+" "+emp2.hashCode()+" " + dep1.equals(emp2));
}
}
更換
'我還沒有覆蓋的hashCode()和equals多的()',確切地說,實際上你沒有重寫'Object#equals',因爲你只是重載了它。重寫它將需要該方法看起來像「公共布爾等於(對象)'。 – SomeJavaGuy
您沒有重寫'equals(Object obj)',這些參數是方法簽名的一部分。還要考慮添加'@ Override'註釋,這將避免這種類型的錯誤。 – Berger
因此,你沒有得到編譯器錯誤,因爲被調用的方法是'equals(Object o)';對編譯器來說是合法的,但會給出一個運行時異常,因爲它的實現需要另一個Department對象。 – arcy