多选题
关于equals和hashCode哪些说法正确
A
equals相等则hashCode相等
B
equals不相等则hashCode不相等
C
hashCode相等则equals相等
D
hashCode不相等则equals不相等
答案解析
正确答案:AD
解析:
解析如下:
A. equals 相等则 hashCode 相等:
这是正确的。根据 Java 的 Object 类中 equals 和 hashCode 方法的规范,如果两个对象在 equals 方法中被认为是相等的(即 equals 返回 true),那么这两个对象必须有相同的 hashCode 值。
B. equals 不相等则 hashCode 不相等:
这是错误的。虽然当两个对象 equals 相等时它们必须具有相同的 hashCode,但是 equals 不相等的对象可能具有相同的 hashCode。也就是说,不同的对象可以拥有相同的哈希码值,这种情况称为哈希碰撞。
C. hashCode 相等则 equals 相等:
这是错误的。两个对象的 hashCode 相等并不意味着这两个对象必须 equals 相等。如上所述,可能会出现哈希碰撞的情况,即不同的对象拥有相同的 hashCode。
D. hashCode 不相等则 equals 不相等:
这是正确的。如果两个对象有不同的 hashCode,那么根据 equals 和 hashCode 的规范,这两个对象一定不是 equals 相等的。这是因为如果 equals 方法认为两个对象相等,则它们的 hashCode 必须也相等;反之,如果 hashCode 不等,则 equals 也不可能相等。
所以正确答案是 AD。
A. equals 相等则 hashCode 相等:
这是正确的。根据 Java 的 Object 类中 equals 和 hashCode 方法的规范,如果两个对象在 equals 方法中被认为是相等的(即 equals 返回 true),那么这两个对象必须有相同的 hashCode 值。
B. equals 不相等则 hashCode 不相等:
这是错误的。虽然当两个对象 equals 相等时它们必须具有相同的 hashCode,但是 equals 不相等的对象可能具有相同的 hashCode。也就是说,不同的对象可以拥有相同的哈希码值,这种情况称为哈希碰撞。
C. hashCode 相等则 equals 相等:
这是错误的。两个对象的 hashCode 相等并不意味着这两个对象必须 equals 相等。如上所述,可能会出现哈希碰撞的情况,即不同的对象拥有相同的 hashCode。
D. hashCode 不相等则 equals 不相等:
这是正确的。如果两个对象有不同的 hashCode,那么根据 equals 和 hashCode 的规范,这两个对象一定不是 equals 相等的。这是因为如果 equals 方法认为两个对象相等,则它们的 hashCode 必须也相等;反之,如果 hashCode 不等,则 equals 也不可能相等。
所以正确答案是 AD。
相关知识点:
equals与hashCode关系:等则等/不等则不等
