繁体   English   中英

为什么在尝试传递两个相同的整数 arrays 时包含方法返回 false

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM