我到处都在寻找解决方案,但是我在代码中找不到任何错误。为什么ArrayList的contains(Object o)无法运行我覆盖的equals(Object o)方法?考虑以下代码:

private class TargetRC {
    public RComponent rc;

    public TargetRC(RComponent e) {
        rc = e;
    }

    @Override
    public boolean equals(Object o) {
        if (o instanceof RComponent)
            return o == rc;
        else
            return o == this;
    }
}

private ArrayList<TargetRC> list = new ArrayList<TargetRC>();

public void add(RComponent e) {
    list.add(new TargetRC(e));
    System.out.println(list.contains(e));
}


如您所见,它是:


对称,因为当且仅当rc == o时o == rc
反身,因为rc == rc


比较中使用的任何RComponent。

通过在此处可见的add(...)方法添加任何元素始终打印为false。 equals(...)方法内没有println()起作用。将“ ==”运算符更改为equals(...)不会有任何区别。怎么了

最佳答案

你测试

list.contains(e)


其中eRComponent
因此,列表为列表中的每个元素调用RComponent.equals(Object)
总是返回false

10-04 19:17