EqualsAndHashCode 详解
时间: 2023-10-20 15:33:33 浏览: 106
详解hashCode()和equals()的本质区别和联系
EqualsAndHashCode 是 Java 中的两个常用方法,用来比较对象的相等性和生成对象的哈希码。
equals() 方法用于判断两个对象是否相等。在默认情况下,它比较的是两个对象的引用是否相同,即比较对象的内存地址。如果我们希望比较对象的内容是否相等,就需要重写 equals() 方法。重写时需要遵循一些规则:
- 自反性:一个对象必须和自身相等,即 x.equals(x) 应返回 true。
- 对称性:如果 x.equals(y) 返回 true,那么 y.equals(x) 也应返回 true。
- 传递性:如果 x.equals(y) 和 y.equals(z) 都返回 true,那么 x.equals(z) 也应返回 true。
- 一致性:如果对象没有被修改,多次调用 equals() 应返回相同的结果。
- 非空性:任何非空引用 x 调用 x.equals(null) 应返回 false。
hashCode() 方法用于计算对象的哈希码。哈希码是一个整数,常用于数据结构中的散列算法。在一些集合类中(如 HashMap、HashSet),hashCode() 方法用于确定对象在集合中的存储位置。在重写 equals() 方法时,也需要同时重写 hashCode() 方法,以保证相等的对象具有相同的哈希码。
在重写 hashCode() 方法时,需要遵循以下规则:
- 如果两个对象通过 equals() 方法相等,那么它们的 hashCode() 值必须相等。
- 如果两个对象的 hashCode() 值相等,它们并不一定相等。
在实际重写 equals() 和 hashCode() 方法时,需要根据对象的实际情况确定比较的字段,通常是对象的属性值。还需要使用 instanceof 运算符检查参数类型,并进行类型转换。同时,equals() 和 hashCode() 方法应尽量保持一致性,即所比较的字段应该一致。
以上是 EqualsAndHashCode 方法的详解,希望能对你有所帮助!
阅读全文