0

equals() に関する疑問を解決してください。equlas() はコンテンツをチェックすると思うので、次の例では、コンテンツが t1 と t2 の両方で同じであるため true を出力する必要がありますが、false を出力します。なんで?

public class Test {
        public static void main(String args[]) {
                Test1 t1 = new Test1(10);
                Test1 t2 = new Test1(10);
                System.out.println(t1.equals(t2));
        }
}

class Test1 {
        int a ;
        Test1( int x){
                a = x ;
        }
}

前もって感謝します

4

5 に答える 5

2

目的の動作を得るには、クラスequalsでオーバーライドする必要があります。それ以外の場合、クラスはからTest1継承され、2 つの参照が同じオブジェクトを参照しているかどうかのみが判断されます。ここでは、さまざまなインスタンスがあり、結果も異なります。equalsObjectfalse

リンクされた javadocs からの引用:

クラス Object の equals メソッドは、オブジェクトに対して最も識別可能な等価関係を実装します。つまり、null 以外の参照値 x と y の場合、このメソッドは、x と y が同じオブジェクトを参照している (x == y の値が true) 場合にのみ true を返します。

通常、他のオブジェクトが同じクラスであるかどうかをテストしてから、個々のフィールドが等しいかどうかを比較します。

于 2013-08-28T16:40:44.047 に答える
1

クラスで equals メソッドをオーバーライドする必要がありますTest1。多分このようなもの:

public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Test1 other = (Test1) obj;
        if (a != other.a)
            return false;
        return true;
    }
于 2013-08-28T16:41:11.930 に答える