第三章 对于所有对象都通用的方法

8. 实现高质量equals方法的诀窍

  1. 使用==操作符检查“参数是否为这个对象的引用”,如果是,返回true;
  2. 使用instanceof操作符检查“参数是否为正确类型”,所谓正确类型,是指equals所在的类,有些情况下是指该类实现的某个接口;
  3. 把参数转换成正确类型,因为转换之前进行过instanceof的测试,所以会确保成功;
  4. 对于该类中的每个“关键”域,检查参数中的域是否与该对象对应的域相匹配;为了获得最佳的性能,应该优先比较最可能不一致的域;
  5. 编写完的equals方法要保证:对称性、一致性、传递性;
  6. 覆盖equals时总要覆盖hashCode
  7. 不要将equals方法中的Object对象替换为其他类型的对象;

9. 覆盖equals时总要覆盖hashCode

  1. equals相同,hashcode一定相同;
  2. equals不同,hashcode不一定不同;
  3. 一个好的散列函数通常倾向于“为不相等的对象产生不相等的散列码”;

10. 始终要覆盖toString

11. 谨慎的覆盖clone

尤其是对象的属性是引用类型的,需要手动来深度拷贝

12. 考虑实现comparable接口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值