美文网首页
《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