0

2 つの配列が同一かどうかをテストしようとしています。それらの内部のすべての値を出力しました。これらの値が同じであることがわかりますが、何らかの理由で等値テストは常に false を返します。equals と Arrays.deepEquals を使用してみましたが、これら 2 つの方法のいずれも機能しません。

これが私のコードです:

System.out.println("========");
for (int i = 0; i < row.length; i++) {
    System.out.println("----------");
    System.out.println(row[i].getAlias());
    System.out.println(row[i].getDisplay());
    System.out.println(row[i].getModify());
    System.out.println(row[i].getName());
    System.out.println(row[i].getType());
    System.out.println(row[i].getOp());
    System.out.println(row[i].getValue());
    System.out.println("----------");
}
System.out.println("========");

for (ResultContainer rc : editedResultsList) {
    System.out.println("========");
    for (int i = 0; i < rc.getResult().length; i++) {
        System.out.println("----------");
        System.out.println(rc.getResult()[i].getAlias());
        System.out.println(rc.getResult()[i].getDisplay());
        System.out.println(rc.getResult()[i].getModify());
        System.out.println(rc.getResult()[i].getName());
        System.out.println(rc.getResult()[i].getType());
        System.out.println(rc.getResult()[i].getOp());
        System.out.println(rc.getResult()[i].getValue());
        System.out.println("----------");
    }
    System.out.println("========");
    System.out.println(rc.getResult().equals(row));
    System.out.println(Arrays.deepEquals(rc.getResult(), row));
    System.out.println(rc.getResult() == row);

    if (rc.getResult().equals(row)) {
         editedResultsList.remove(rc);
    }
}

出力は次のとおりです。

========
----------
null
false
false
mep_ident
NUMBER
insert
0
----------
----------
Numéro Partenaire
true
true
mep_ptrpartident
NUMBER
insert
000
----------
----------
Numéro Produit
true
true
mep_ptrpasident
NUMBER
insert
111
----------
----------
Code Document
true
true
mep_code_doc
VARCHAR2
insert
222
----------
----------
Production ?
true
true
mep_production
VARCHAR2
insert
333
----------
========
========
----------
null
false
false
mep_ident
NUMBER
insert
0
----------
----------
Numéro Partenaire
true
true
mep_ptrpartident
NUMBER
insert
000
----------
----------
Numéro Produit
true
true
mep_ptrpasident
NUMBER
insert
111
----------
----------
Code Document
true
true
mep_code_doc
VARCHAR2
insert
222
----------
----------
Production ?
true
true
mep_production
VARCHAR2
insert
333
----------
========
false
false
false
true
4

2 に答える 2

0

getAliase() およびこれらすべてのメソッドがプリミティブ型 data-type で使用されていないため、作成した 2 つの配列を指定します。実際の配列を取得する場合は、ここでプリミティブ型のコードを指定します。コードを変更します。

public class ChecktwoArray {


public static void main(String[] args) {
    int a[]={2,5,6};
    int b[]={2,5,6};
    System.out.println(Arrays.equals(a,b));

}

}

別の配列を使用している場合は、これらのメソッドをオーバーライドする必要があります。hashcode() がないと、toString() メソッドはコンテンツではなくメモリ アドレスのみをチェックするためです。

@Override
public boolean equals(Object obj) {
    // TODO Auto-generated method stub
    return super.equals(obj);
}

@Override
public int hashCode() {
    // TODO Auto-generated method stub
    return super.hashCode();
}

@Override
public String toString() {
    // TODO Auto-generated method stub
    return super.toString();
}
于 2013-08-02T08:43:33.760 に答える