8. 实现高质量equals方法的诀窍
- 使用==操作符检查“参数是否为这个对象的引用”,如果是,返回true;
- 使用instanceof操作符检查“参数是否为正确类型”,所谓正确类型,是指equals所在的类,有些情况下是指该类实现的某个接口;
- 把参数转换成正确类型,因为转换之前进行过instanceof的测试,所以会确保成功;
- 对于该类中的每个“关键”域,检查参数中的域是否与该对象对应的域相匹配;为了获得最佳的性能,应该优先比较最可能不一致的域;
- 编写完的equals方法要保证:对称性、一致性、传递性;
- 覆盖equals时总要覆盖hashCode
- 不要将equals方法中的Object对象替换为其他类型的对象;
9. 覆盖equals时总要覆盖hashCode
- equals相同,hashcode一定相同;
- equals不同,hashcode不一定不同;
- 一个好的散列函数通常倾向于“为不相等的对象产生不相等的散列码”;
10. 始终要覆盖toString
11. 谨慎的覆盖clone
尤其是对象的属性是引用类型的,需要手动来深度拷贝