《Effective java》学习笔记 2 之 对于所有对象都通用的方法
博客专区 > 厚德 的博客 > 博客详情
《Effective java》学习笔记 2 之 对于所有对象都通用的方法
厚德 发表于3年前
《Effective java》学习笔记 2 之 对于所有对象都通用的方法
  • 发表于 3年前
  • 阅读 12
  • 收藏 0
  • 点赞 0
  • 评论 0

移动开发云端新模式探索实践 >>>   

1.覆盖equals时请遵守通用约定

要覆盖equals就必须遵循以下约定

1 自反性

对于非空对象x x.equals(x)为true。(基本都满足)

2 对称性

对于非空对象x y. 若x.equals(y) 返回true,则y.equals(x) 一定返回true

3 传递性

对于非空对象x y z 。 若 x.equals(y), y.equals(z) 都返回true,则一定有x.equals(z) 返回true

4 一致性

对于不可变对象来说,如果两个对象相等,则永远相等。可变对象就不一定了。设计类是的时候就要考虑到它是否可变,不可变就必须遵循一致性。

5 非空性

对于非空对象x x.equals(null)都必须返回false

2.在覆盖equals时总要覆盖hashCode方法

对于覆盖hashcode也有约定:

1 在应用程序的执行期间,只要对象的equals方法的比较操作作用到的信息没有发生改变,那么对同一个对象多次调用,hashCode返回码必须是同一个整数。

2 如果两个对象根据equals方法比较相等,那么调用这两个对象任意一个对象的hashCode方法都必须产生同样的整数结果。

3 始终要覆盖toString ,toString覆盖起来没有太多的约定。

4 谨慎覆盖clone ,调用clone方法是不会调用构造器的。 其他的没理解清楚,不写了。

5 考虑实现Comparable接口,实现此接口可以在部分集合中完成排序的功能,compareTo也应该有 equals的传递性。


  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 2
博文 51
码字总数 33193
×
厚德
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: