我正在尝试测试两个数组是否相同,我打印出其中的每个值,您可以看到这些值是相同的但由于某种原因,相等测试总是返回false。我尝试过使用equals和Arrays.deepEquals,但这两种方法都不起作用。
这是我的代码:
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
答案 0 :(得分:2)
来自Javadoc:
如果满足以下任何条件,则两个可能为空的元素e1和e2非常相等:
- e1和e2都是对象引用类型的数组,而Arrays.deepEquals(e1,e2)将返回true - e1和e2是相同基本类型的数组,并且Arrays.equals(e1,e2)的相应重载将返回true。
- e1 == e2
- e1.equals(e2)将返回true。
关于数组中对象的类,请确保正确覆盖equals()
和hashcode()
。
更新
咨询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)
}
答案 1 :(得分:0)
指定你创建的两个数组,因为getAliase()和所有那些方法都没有使用原始类型data-type。我在这里给出了原始类型的代码,如果我得到你的实际数组我会修改我的代码。
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();
}