zoukankan      html  css  js  c++  java
  • 覆盖equals时请遵守通用约定

    Object类中非final修饰的方法有equals()、hashCode()、toString()、finalize()、clone()
    1、equals()方法不需要被覆盖的情况:
    1)实例化的对象只有一个
    2)不需要进行逻辑判断,只是单纯的比较内存地址是否相同
    3)父类覆盖了equals()方法,并且子类中完全够用
    4)类是私有的或者包级私有,equals()方法不会被调用。但是建议重写然后抛AssertionError(断言语句失败)异常

    2、equals()方法需要被覆盖的情况:
    想要实现逻辑比较。比如实现 相同值的不同对象认为是相等的

    3、equals方法通用约定:
    1)自反性:自己和自己比较时 返回true
    2)对称性:x.equals(y) 和 y.equals(x)必须是相同的
    3)传递性:如何x.equals(y) y.equals(z)那么x.equals(z)
    4)一致性:如果对象的值没有改变,那么x.equals(y)一直是相同的结果
    5)非空性:任何非空对象和null比较都返回false

    4、覆盖equals方法的步骤
    1)== 判断两个对象的内存地址是否相同。
    2)对象instanceof类型 判断传的参数是否属于同一个类型 不是的话 直接返回false
    3)将参数转化为实际的类型,因为instanceof已经判断过,所以放心转。
    4)判断关键域是否相同。

    5、覆盖equals应当注意的问题
    1)short、byte、int、long可以用==比较。float和double用Float.equals() Float.compare
    2)先比价 容易比较的域
    3)覆盖equals总要覆盖hashCode
    4)不要过度追求功能
    5)重写一定要传参一致 及 boolean equals(Object obj)

  • 相关阅读:
    项目经理手记
    自动填写版权信息
    在批处理中实现等待/延迟/暂停
    使用 PowerDesigner 设计数据库
    如何让PowerDesigner支持自动生成含SQL Server 2000的表和列注释的角本
    管理人员的招聘始末谈
    PowerDesign 6简易介绍
    PowerDesigner11.0使用总结
    用表单字段加亮的方式为用户提供友好的界面
    择才有道——企业招聘方式比较
  • 原文地址:https://www.cnblogs.com/lizhen-home/p/7786456.html
Copyright © 2011-2022 走看看