所以這是從頭部的第一個Java(頁563)的hashCode平等對象
的默認行爲()是產生堆上每個對象一個唯一的整數 。 因此,如果您不覆蓋類中的hashCode(),則不會認爲該類型的兩個對象相等。
但一個簡單的測試將反駁這個我認爲。
public class Song {
private String name;
public Song(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public boolean equals(Object obj) {
Song objectSong = (Song) obj;
return this.getName().equals(objectSong.getName());
}
}
嗯,這將返回true:
Song songA = new Song("A","B");
Song songB = new Song("A","C");
System.out.println(songA.equals(songB));
我這麼想嗎?這本書試圖告訴我什麼?
就在你引用它的部分之前說「如果你重寫equals(),你必須重寫hashCode()」。 – Robert
@Robert對不起,我不明白,你有什麼想告訴這個評論? –
在頁563上它說:「如果你重寫equals(),如果你不重寫hashCode(),你必須重寫hashCode()」**和**「,沒有兩個對象可以被認爲是相等的。所以如果你不重寫hashCode(),你不能覆蓋equals(),因此不能認爲兩個對象是相等的。 – Robert