所以这是从头部的第一个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