gpt4 book ai didi

java - 为什么当尝试传递两个相同的整数数组时 contains 方法返回 false

转载 作者:行者123 更新时间:2023-12-01 19:33:28 24 4
gpt4 key购买 nike

我正在尝试比较两个对象。每个对象都是一对整数数组 (A,B)。我在网上查看了如何正确实现它,但仍然返回 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 方法是比较引用,这基本上与在它们之间(或任何其他引用类型之间)执行 == 相同。如果两个引用都指向内存中的同一个对象,则认为它们相等。由于您正在创建两个单独的整数数组,因此它们是位于两个不同内存位置的两个不同对象。这就是为什么你总是得到 false 结果。

要按元素比较数组,请使用 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;
}
}

关于java - 为什么当尝试传递两个相同的整数数组时 contains 方法返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58674145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com