java语言基础--equals方法

同toString方法一样https://www.cnblogs.com/dssjustdoit/articles/9483837.html,equals()方法也是可以通过重写,来适应我们代码需求的。

比如说,我用Object类创建两个对象o1,o2,常理来说,o1.equals(o2)应该返回true,但是返回的是false,这是因为,equals比较的是两个引用对象的地址值,这自然不相等了,但是我们为了让代码更符合我们的逻辑思维,那么我们需要对equals方法进行重写。

举个栗子:

class Star {

    int id;

    String name;

    public Star(String name, int id) {
        this.name = name;
        this.id = id;
    }

    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj instanceof Star) {
            Star s = (Star) obj;
            if (this.id == s.id && this.name.equals(name)) {
                return true;
            }
        }

        return false;
    }

}

public class Test01 {

    public static void main(String[] args) {

        Object o1 = new Object();
        Object o2 = new Object();
        System.out.println(o1.equals(o2));
        Object o3 = o2;
        System.out.println(o3.equals(o2));
        Star s1 = new Star("成龙", 33);
        Star s2 = new Star("成龙", 33);
        System.out.println(s1.equals(s2));
    }
}

s2与s1相同了。

注:可能会疑惑,o1和o2还是不相等啊,那是因为o1和o2的name和id不相等。

注:不同类型是不能用.equals()的方法的。

注:为什么上面this.name.equals(name)这个代码是得到的是true呢,那是因为,在String.java这个类中已经对equals方法进行了重写,所以比较两个对象返回的是true。

注:==的话,比较的是两个对象的地址值。

posted on 2018-08-15 21:26  董大志  阅读(158)  评论(0)    收藏  举报

导航