equals / Arrays.deepequals возвращает false для идентичных массивов
Я пытаюсь проверить, идентичны ли два массива, я распечатал все значения внутри них, и вы можете видеть, что эти значения одинаковы, но по какой-то причине тест на равенство всегда возвращает false. Я пытался использовать равно, а также 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
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()
должным образом.
ОБНОВИТЬ
Обратитесь к объекту 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)
}
Укажите два массива, в которых вы создали, потому что 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();
}