“==”和equals的区别

79 阅读1分钟

想起来一个Java基础问题,就复习了一下

“==”和equals 最大的区别在于

  • “==”是运算符,如果是基本数据类型(八类:byte 、short 、int 、long、float 、 double、char、boolean),则比较存储的值;如果是引用数据类型,则比较所指向对象的地址值
  • equals是Object的一个方法,比较的是所指向的对象的地址值,一般情况下,重写之后比较的是对象的值
public boolean equals(Object obj) {
        return (this == obj);
    }

可以看出equals是Object的一个方法,内部实际也使用了“==”,从这个方法里也就可以看出,equals在没有重写的情况下只能比较两个对象(this == obj)。

有些类重写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;
}