本质:== 是运算符,equals是方法

== 对基本数据类型是比较内容值,而引用数据类型是比较引用值。

 

看代码

1 Object类的equals方法

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

可见Object下equals的效果就是 == 的效果

2 大多数类重写了equals方法:

String重写后的equals

private final char value[];
public boolean equals(Object anObject) {
    if (this == anObject) {  //如果引用地址是否一致
        return true;
    }
    if (anObject instanceof String) {   //如果传进来的是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;
}

自己写的User类重写equals

public class User implements Serializable {
    private String name;
    private int age;
    //set,get方法

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;  //如果引用地址一样
        if (o == null || getClass() != o.getClass()) return false;  //如果传入的o是null或者传入的o不是User类型

        User user = (User) o;  

        if (age != user.age) return false;  //一个个属性分别比较是否一致
        return name.equals(user.name);
    }

}

 

posted on 2020-12-24 14:43  JustCrazy  阅读(417)  评论(0)    收藏  举报