# ==equals

== 在比较两个基本数据类型的时,比较的是两个基本类型的值。如果比较的是两个对象比较的是两个对象的地址。

equals 是 Ojbect 中的方法,在 Java 中所有的类都继承自 Object ,所以所有类都有 equals 方法,来看一下 Object 中 equals 方法

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

可以看到,在 Object 中 equals 等价于 ==

不过通常 equals 在类中会被重写,比如:String

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {

    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 ,只要对比的对象,地址相同,或者值相同,就认定两个 String 相同。

再来看下 Integer 中的 equals

public final class Integer extends Number implements Comparable<Integer> {
    public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }
}

Integer 很干脆,就是对比的对象都要是 Integer ,并且两个值相等。

# 总结

==Object#equals 是等价的,都是比较的地址。

不过 == 不一定等价于 其他类的 equals ,因为 equals 通常会被重写,而是否等价,取决于重写后的代码实现。

最近更新时间: 7/12/2020, 9:24:26 PM