Java「=」とequalsの恩讐

1134 ワード

「=」の概念
「=」は、基本的なデータタイプの値を比較するために使用され、またはタイプ変数のハッシュ値を参照するために使用されます。
Objectのequals()方法
実現は「=」を呼び出すことです。
 public boolean equals(Object obj ) {
    return (this == obj);
 }
しかし、一部のクラスでは、Steringなどの方法が書き換えられ、これはオブジェクトであり、その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;
}
例えば、Integerなど
public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer) obj).intValue();
    }
    return false;
}
結論
だから「=」とequals()の違いはObjectを書き換えるequalsルールがあるかどうかです。