我不明白 Java 中有什么愚蠢的东西,希望你能帮我弄清楚。
我已经定义Hashset<Point> myHashSet = new HashSet<Point>();
然后,我创建两个相等的 Point 点 ,Point p1 and Point p2
并将它们放在不同的变量/内存位置。然后我重写 .equals() 方法public boolean equals(Point other)
并将我的第一个点 p1 添加到 HashSet。
然后我打电话System.out.println(myHashSet.contains(p2)); // prints false
为什么编译器不能从创建时推断出“哦,这个哈希集的类型是 Point”,并说“我应该检查 Point 是否覆盖了默认的 equals 方法......是的,让我们称之为一个!” .
相反,我相信它调用对象的通用 equals 方法,从而比较内存位置,我相信?
这样做的原因仅仅是 HashSet 可以包含 Point 的子类,它使用不同的 Equals 方法吗?这是我能看到当前行为的唯一原因,尽管我确信我忽略了一些东西:)。非常感谢。