跳到主要内容

两个对象值相同(x.equals(y) == true),但却可有不同的 hash code,这句 话对不对?

参考答案:

不对。根据Java的Object类中的规定,如果两个对象通过equals(Object obj)方法比较是相等的(即x.equals(y) == true),那么这两个对象的hashCode()方法必须返回相同的整数结果。这是Java的hashCode()方法的通用约定。

换句话说,如果两个对象相等(即它们在equals()方法中是相等的),则它们的hashCode()方法必须返回相同的值。如果违反了这一约定,那么Java的一些集合类(如HashMapHashSet等)可能无法正常工作,因为这些类依赖于hashCode()方法来快速查找和存储对象。

但是,需要注意的是,尽管两个对象有不同的hashCode()值,它们仍然可能通过equals()方法被认为是相等的。这意味着hashCode()的返回值不同并不一定意味着两个对象不相等,但相等的对象必须有相同的hashCode()值。