覆盖equals时请遵守通用约定
自反性。对象必须等于自身。
对称性。任何两个对象对于“它们是否相等”的问题都必须保持一致。
传递性。如果一个对象等于第二个对象,并且第二个对象等于第三个对象,则第一个对象一定等于第三个对象
一致性。如果两个对象相等,它们就必须始终保持相等,除非它们中有一个对象(或者两个都)被修改了。
非空性。所有的对象都必须不等于
null
覆盖equals时总要覆盖hashCode
对一个对象调用多次,
hashCode
返回同一个整数;equals
相等的两个对象,hashCode
返回同一个整数;equals
不相等的两个对象,hashCode
返回不同的整数;
始终要覆盖toString
- 提供好的
toString
实现可以使类用起来更加舒适。
谨慎地覆盖clone
考虑实现Comparable接口
- 如果正在编写一个值类,它具有非常明显的内在排序关系,比如按字母排序、按数值排序或者按年代顺序,那么就应该考虑实现这个接口。