主要是说一下 equals 和 hashcode
1.hashCode
- 此方法主要是用来支持 hash tables。比如 HashMap
- 要求在 equals 不改动的情况下,每次调用得到的 hashCode 必须是一致的。
- 两个对象 equals 相等,则 hashCode 也应该相等。
- equals 不相等,则不必要求 hashCode 一定不同,应尽量不同以保证高性能。
- 默认实现,通常是通过对象的内部地址转换为整数,所以大多数情况下 Object 定义的 hashCode 确实可以为不同的对象返回不同的整数。
2.equals
- 对于 non-null reference x ,满足 x.equals(x) return true。
- 对于 non-null reference x,y 满足 对称性 即:如果 x.equals(y) return true ,则 y.equals(x) 也会 return true 。
- 对于 non-null reference x,y,x 满足 传递性。即:如果 x.equals(y) return true 和 y.equals(z) return true,那么 x.equals(z) 也应该 return true 。
- 对于任何 non-null reference x,y,满足一致性,x.equals(y) 要是 true永远是true
- 对于任何 non-null reference x, x.equals(null) return false.
- 当重写 equals 方法是必须需要重写 hashCode,这样才能保证 equals 为true的两个对象的 hashCode也一样。(jre 中就有违背这条的类存在)
- equals 默认是比较的内存地址。所以默认情况下,当 equals 相等的时候,hashCode也是相等的。