1. equals 和 hashcode

equals
比较两个对象是否是同一个
equals 方法在非空对象引用上实现等价关系:

  • 自反性(reflexive)。对于任意不为 null 的引用值 x,x.equals(x) 一定是 true。
  • 对称性(symmetric)。对于任意不为 null 的引用值 x 和 y,当且仅当 x.equals(y) 是 true 时,y.equals(x) 也是 true。
  • 传递性(transitive)。对于任意不为 null 的引用值 x、y 和 z,如果 x.equals(y) 是 true,同时 y.equals(z) 是true,那么 x.equals(z) 一定是 true。
  • 一致性(consistent)。对于任意不为 null 的引用值 x 和 y ,如果用于equals比较的对象信息没有被修改的话,多次调用时 x.equals(y) 要么一致地返回 true 要么一致地返回 false 。
  • 对于任意不为 null 的引用值 x,x.equals(null) 返回 false。

对于 Object 类来说,equals() 方法在对象上实现的是差别可能性最大的等价关系,即,对于任意非 null 的引用值 x 和 y,当且仅当 x 和 y 引用的是同一个对象,该方法才会返回 true。
hashcode