effective-java-三

第八条:覆盖equals时请遵守通用约定

  1. 类的每个实例本质上都是唯一的
  2. 不关心类是否提供了“逻辑相等”的测试功能
  3. 超类已经覆盖了equals, 从超类继承过来的行为对于子类也是合适的
  4. 类是私有的或者包级别私有的,可以确定它的equals方法永远不会被调用

equals方法实现了等价关系

  1. 自反性: 对于任何非null的引用值x, x.equals(x) 必须返回true;
  2. 对称性: 对于任何非null的引用值xy, 当且仅当x.equals(y)返回true时, y.equals(x)必须返回true;
  3. 传递性: 对于任何非null的引用值x,’y’和z,如果x.equals(y)返回true,并且y.equals(z)也返回true,那么x.equals(z)也必须返回true;
  4. 一致性: 对于任何非null的引用值xy,只要equals中的比较信息没有被改变,多次调用x.equals(y)就会一直返回true或者false;
  5. 对于任何非null的引用值xx.equals(null)必须返回false;

第九条: 覆盖equals时总要覆盖hashCode

第十条: 始终要覆盖toString

第十一条: 谨慎覆盖clone

第十二条: 考虑实现Comparable接口

compareTo 方法返回值为负值,0,正值, 表示 小于, 等于, 大于