深入java的equals方法,怎么比较两个对象的

如题所述

当定义一个类时,首先这个类会继承Object类(所有类的父类)的equals方法,然后开发者可以根据具体业务场景去考虑要不要重写equals方法。

public boolean equals(Object obj) {
    return (this == obj);
}

上面代码即是Object的equals方法的实现, == 判断,即两个对象的地址完全一样的时候才相等。

当开发者定义类时不重写equals方法,则实际调用中使用Object这个父类的equals方法实现。

下面看看String的equals方法:

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

这就是String重写的equals方法,可以仔细看看,很有参考价值。

接下来写段类定义的代码:

public class Person {
    private String name;  // 姓名
    private int age; // 年龄
    private String speciality; // 特长

    @Override
    public boolean equals(Object obj) {
        // 两个对象是同一个时,直接return true
        if (this == obj) {
            return true;
        }
        if (obj instanceof Person) {
        // 比较对象也是Person对象时,判断name和age是否都相同
            Person p = (Person) obj;
            return name.equals(p.name) && age == p.age;
        }
        return false;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSpeciality() {
        return speciality;
    }

    public void setSpeciality(String speciality) {
        this.speciality = speciality;
    }
}

测试代码:

public class Test {

    public static void main(String[] args) throws IOException {
        Person p1 = new Person("张三", 20, "java");
        Person p2 = new Person("张三", 20, "python");

        System.out.println(p1.equals(p2));
    }
}

根据Person重写的equals方法可以知道,运行结果为 true

如果Person没有重写equals方法,那么会调用Object的equals方法,运行结果为 false

所以实际怎么比较两个对象这完全是看开发者也就是你自己的意思

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-03-04
equals只能比较string和boolean类型的值,返回值为true和false,对象怎么比较?