![](/img/trans.png)
[英]Why does the equals() method return false when the two objects are identical?
[英]Why the contains method returns false when trying to pass two identical arrays of Integers
我正在尝试比较两个对象。 每个 object 是一对整数 arrays (A,B)。 我查看了 web 如何正确实施它,但仍然返回 false。 举个例子:下面的代码
Example ex=new Example(new Integer[]{0,0,1},new Integer[]{1,0,0});
Example ex2=new Example(new Integer[]{0,0,1},new Integer[]{1,0,0});
System.out.println(ex.equals(ex2));
返回假。 虽然它应该是真的。 我确定这是因为 Integer 类/自动包装箱包装?
class Example{
Integer[] A;
Integer[] B;
// constructor and setters and getters
@Override
public int hashCode() {
return getA().hashCode()+getB().hashCode();
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Example)
{
Example ex=(Example)obj;
if(ex.getA().equals(getA())&& ex.getB().equals(getB()))
return true;
if(ex.getA().equals(getB())&& ex.getB().equals(getA()))
return true;
return false;
}
return false;
}
}
您使用的equals
方法是比较引用,这与在它们之间(或在任何其他引用类型之间)执行==
基本相同。 如果两个引用都指向 memory 中的相同 object,则认为它们是相等的。 由于您要创建两个单独的 arrays 整数,因此它们是位于两个不同 memory 位置的两个不同对象。 这就是为什么你总是得到false
的结果。
要按元素比较 arrays,请使用Arrays.equals
方法,如下所示:
@Override
public boolean equals(Object obj) {
if(obj instanceof Example)
{
Example ex=(Example)obj;
if(Arrays.equals(ex.getA(), getA())&& Arrays.equals(ex.getB(), getB()))
return true;
if(Arrays.equals(ex.getA(), getB())&& Arrays.equals(ex.getB(), getA()))
return true;
return false;
}
return false;
}
}
当您在两个 arrays 上使用.equals()
时,它将执行与==
相同的操作,即检查引用是否相同。 因为它们不是,所以它会返回false
。 您想使用java.util.Arrays.equals(A, ex.getA())
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.