两个对象值相同(x.equals(y) == true),但却可有不同的 hash code,这句 话对不对?
参考答案:
不对。根据Java的Object
类中的规定,如果两个对象通过equals(Object obj)
方法比较是相等的(即x.equals(y) == true
),那么这两个对象的hashCode()
方法必须返回相同的整数结果。这是Java的hashCode()
方法的通用约定。
换句话说,如果两个对象相等(即它们在equals()
方法中是相等的),则它们的hashCode()
方法必须返回相同的值。如果违反了这一约定,那么Java的一些集合类(如HashMap
、HashSet
等)可能无法正常工作,因为这些类依赖于hashCode()
方法来快速查找和存储对象。
但是,需要注意的是,尽管两个对象有不同的hashCode()
值,它们仍然可能通过equals()
方法被认为是相等的。这意味着hashCode()
的返回值不同并不一定意味着两个对象不相等,但相等的对象必须有相同的hashCode()
值。