2013-08-02 39 views
0

我试图测试两个数组是否相同,我打印出他们中的每个值,你可以看到这些值是相同的,但由于某种原因平等测试始终返回false。我试过使用equals以及Arrays.deepEquals,但这两种方法都不起作用。等于/ Arrays.deepequals在相同的数组上返回false

这里是我的代码:

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 

回答

2

Javadoc:E1

两个null元素和E2如有的深层相等以下条件成立:
- e1和e2都是目标数组c1引用类型和Arrays.deepEquals(e1,e2)将返回true
- e1和e2是相同基元类型的数组,并且Arrays.equals(e1,e2)的适当重载将返回true。
- e1 == e2
- e1.equals(e2)将返回true。

关于类,你在你的数组中有对象,确保覆盖equals()hashcode()正常。

UPDATE

咨询Object javadoc,基本上你需要把它添加到您的类:

@Override 
public boolean equals(Object other) { 
    // Add here code to verifiy that this object is "equals" 
    // to the method argument "other". 
    // return true if they are equal or false otherwise 
} 

@Override 
public int hashCode() { 
    // Return here a "hash" integer (two objects equals to each other 
    // must return the same hashcode) 
} 
+0

从最后一行时,不应该这不是一个评论? – tbodt

+0

我还没有在该类中覆盖equals和hashcode。 – noisegrrrl

+0

@tbodt我不明白你的意见,但无论如何我重写了最后一部分。 – morgano

0

指定你的两个数组,你已经因为getAliase(),所有这些方法都没有用创建原始类型数据类型。我在这里给出原始类型的代码,如果我将得到您的实际数组,我将修改我的代码。

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(); 
} 
+0

[@tbodt](http://stackoverflow.com/users/1455016/tbodt)我认为这会正常工作。 – 2013-08-02 08:51:28