Java equals()重写

来源:互联网 发布:网络用语 看法 编辑:程序博客网 时间:2024/06/05 11:07

参照java核心卷1

java规范中equals方法特征

  • 自反性

对于任何非空引用x, x.equals(x) 返回true;

  • 对称性

对于任何引用x, y, 当且仅当y.equals(x) 返回true, x.equals(y)返回true;

  • 传递性

对于任何引用x, y, z, 若x.equals(y)返回true, y.equals(z)返回true; 则 x.equals(z)返回true;

  • 一致性

若x和y引用的对象没有发生改变, 则反复调用x.equals(y)应该返回同样的结果.

  • 对任意非空引用x, x.equals(null) 返回false;

编写equals方法的建议:

  1. 显示参数命名为otherObject, 稍后转化成other变量
    public boolean equals(Object otherObject)
  2. 检测this和otherObject是否是同一个对象的引用,是,返回true;
    if(this==otherObject){
        return true;
    }
  3. 检测otherObject是否为null, 是, 返回false;
    if(otherObject == null){
        return false;
    }
  4. 比较this和otherObject是否属于同一个类. 如果equals的语义在每个子类中有所改变,就使用getClass检测:
    if(getClass() != otherObject.getClass()){
        return false;
    }
    如果所以子类语义相同,使用instanceof检测:
    if(!(otherObject instanceof Employee)){
        return false;
    }
  5. 将otherObject转化为相对应的类型变量other
    Employee other = (Employee)otherObject;
  6. 对所需要的比较的数据域进行比较. 如果是基本数据类型,使用a==b比较; 如果是对象比较,调用Objects.equals(a, b)进行比较
    return Objects.equals(name, other.name) && salary == other.salary && Objects.equals(hireDay, other.hireDay);
总体代码:

    public class Employee {
    private String name;
    private double salary;
    private Date hireDay;

    ... 

    @Override
    public boolean equals(Object obj) {
        // 如果为同一对象的不同引用,则相同
        if (this == obj) {
            return true;
        }
        // 如果传入的对象为空,则返回false
        if (obj == null) {
            return false;
        }

        // 如果两者属于不同的类型,不能相等
        if (getClass() != obj.getClass()) {
            return false;
        }

        // 类型相同, 比较内容是否相同
        Employee other = (Employee) obj;

        return Objects.equals(name, other.name) && salary == other.salary && Objects.equals(hireDay, other.hireDay);
    }

必须重写Object的equals方法!!不能写的参数不同,这样就是一个新的方法了

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 甲减引起掉头发怎么办 掉头发严重怎么办40岁 4岁宝宝头发稀少怎么办 25岁头发顶脱发怎么办 头发细又少和软怎么办 头顶上头发少怎么办呢 3岁宝贝头发稀少怎么办 2岁幼儿头发稀少怎么办 小孩头发太少了怎么办 头发少盘丸子头怎么办 油头发掉的厉害怎么办 头顶头发长得慢怎么办 每次洗头发都掉很多头发怎么办 拔了头发不长怎么办 6岁儿童头发稀少怎么办 2岁宝宝胆子小怎么办 坐到小孩的头怎么办 托班幼儿不刷牙怎么办 两岁的宝宝蛀牙怎么办 小孩在学校被打怎么办 油画棒画在墙上怎么办 宝宝把蜡笔吃了怎么办 吃鸡更新了怎么办开始 数字画涂料干了怎么办 广告画颜料干了怎么办 宝宝断奶后瘦了怎么办 腿一个粗一个细怎么办 两条小腿不一样粗怎么办 两岁宝宝坐不了怎么办 q糖孩子吃多了怎么办 q糖孩子吃的太多怎么办 ps图层不能覆盖怎么办 孩子的字写的不好怎么办 孩子爱打人怎么办 6招 一岁宝宝爱打人怎么办 2岁小朋友爱打人怎么办 小朋友爱动手怎么办4岁 5,6岁爱动手打人怎么办 七个月宝宝大便干燥怎么办 两岁宝宝吐奶怎么办 2岁宝宝轻微蛀牙怎么办