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)

  • 相关阅读:
    html基础知识点
    uni-app之tabBar的自己配置
    uni-app之导航配置pages.json
    js获取链接?后边的参数名称或者值
    验证码输入自动聚焦下一个input或者删除自动聚焦上一个input
    VUE中/deep/深度作用域
    vue环境下新建项目
    vue中展示数据
    VUE环境项目搭建以及简单的运行例子
    ios设置音乐audio自动播放
  • 原文地址:https://www.cnblogs.com/lizhen-home/p/7786456.html
Copyright © 2011-2022 走看看