美文网首页
《Effective Java》读书笔记三:对于所有对象都通用的

《Effective Java》读书笔记三:对于所有对象都通用的

作者: 内卷星球 | 来源:发表于2019-10-10 14:34 被阅读0次

覆盖equals时请遵守通用约定

equals方法实现了等价关系

  • 自反性:对于任何非null的引用值x,x.equals(x)必须返回true
  • 对称性:对于任何非null的引用值x和y,当且仅当y.equals(x)返回true时,x.equals(y)必须返回true
  • 传递性:对于任何非null的引用值x、y和z,如果x.equals(y)返回true,y.equals(z)也返回true,那么x.equals(z)也必须返回true
  • 一致性:对于任何非null的引用值x和y,只要equals的比较操作在对象中所用的信息没有被修改,多次调用equals返回的结果也一致
  • 非空性:对于任何非null的引用值x,x.equals(null)必须返回false

实现高质量equals方法的诀窍

  1. 使用==操作符检查“参数是否为这个对象的引用”
  2. 使用instanceof操作符检查“参数是否为正确的类型”
  3. 把参数转换成正确的类型
  4. 对于该类中的每个“关键”域,检查参数中的域是否与该对象中对应的域相匹配
  5. 当编写完成了equals,要确认三要素:对称性、传递性、一致性
  • 覆盖equals时总是要覆盖hashCode
  • 不要企图让equals方法过于智能
  • 不要将equals声明中的Object对象替换为其他的类型

覆盖equals时总是要覆盖hashCode

在每个覆盖了equals方法的类中,也必须覆盖hashCode方法

相等的对象必须具有相等的散列码

始终覆盖toString方法

谨慎地覆盖clone

考虑实现Comparable接口

相关文章

网友评论

      本文标题:《Effective Java》读书笔记三:对于所有对象都通用的

      本文链接:https://www.haomeiwen.com/subject/xiozwqtx.html