0

equals メソッドをオーバーライドせずに、同じクラスの 2 つのオブジェクトを比較することは可能ですか? はいの場合、方法を教えてください.. ? 私によると、オブジェクトには変数値ではなくメモリアドレスが含まれているため、オーバーライドせずに同じクラスの2つの異なるオブジェクトの変数を比較することはできません。

class A {
int x;
A(int x) {
this.x=x; }
}


A a1=new A(5);
A a2=new A(4);

equals メソッドを使用して、オーバーライドせずに a1 と a2 を比較できますか? また、a1とa2のアドレスではなく、値を比較する必要があります...

4

4 に答える 4

1

基本的なオブジェクト ID は、==演算子を使用するかequals()、オーバーライドされていない場合に検証できます。独自のカスタム動作を定義したい場合はequals()、もちろんそれをオーバーライドする必要があります。

于 2013-06-26T12:42:39.617 に答える
0

それはあなたの要件に依存します。Comparatorを実装し、必要に応じてそのcompare()をオーバーライドできます。内部のロジックは、compare()まったく使用する必要はありませequals()hashCode()。等しいかどうかをチェックすることと、オブジェクトを比較することは別のことだと思います。

于 2013-06-26T12:40:37.480 に答える
0

:を使用してこれを行うことができますComparator(compare メソッド、 が返さ0れる場合.equals()に返される必要がありますtrue) 。

public class YourClassComparator implements Comparator<YourClass> {
    @Override
    public int compare(YourClass left, YourClass right) {
        // do the comparison and return
        // <0 if left < right
        // 0 if left equals right
        // >0 if left > right
    }
}

そして、それを使用して等しいかどうかを確認します

if(new YourClassComparator().compare(yourClass1, yourClass2) == 0) {
    // objects are equal
}
于 2013-06-26T12:42:27.157 に答える