如果在java中我重写了“equals()”而不是hashCode(),会怎么样?

如果在java中我重写了“equals()”而不是hashCode(),会怎么样?,java,object,overriding,equals,hashcode,Java,Object,Overriding,Equals,Hashcode,[Core java programming]说,如果我重写Object.equals,那么我应该同时重写Object.hashCode 这对我来说很奇怪,如果我不同时重写hashCode,是否有可能在逻辑中发生错误 你能举个例子说明一下吗 非常感谢。如果a.equalsb为真,则a.hashCode==b.hashCode也必须为真。如果不是这样,则将a添加到HashSet,然后检查set.containsb是否会返回false,即使该集包含a(等于b) 这就是为什么对象类中hashCode的

[Core java programming]说,如果我重写Object.equals,那么我应该同时重写Object.hashCode

这对我来说很奇怪,如果我不同时重写hashCode,是否有可能在逻辑中发生错误

你能举个例子说明一下吗

非常感谢。

如果a.equalsb为真,则a.hashCode==b.hashCode也必须为真。如果不是这样,则将a添加到HashSet,然后检查set.containsb是否会返回false,即使该集包含a(等于b)

这就是为什么对象类中hashCode的契约声明:

如果根据equalsObject方法两个对象相等,那么对两个对象中的每个对象调用hashCode方法必须产生相同的整数结果


你将打破HashSet和HashMap——如果相等的对象可以有不同的哈希代码,它们可能会在一个哈希集中出现两次,这不是你在一个哈希集中想要的。我将看一看现有的帖子:Java API的许多领域都有这样的约定:如果两个对象通过equals匹配,那么它们应该有相同的哈希代码。如果不重写hashcode并强制执行此操作,则合同将破裂。请检查此项: