为什么 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)
其中e
是一个RComponent
。
因此,列表为列表中的每个元素调用 RComponent.equals(Object)
它总是返回false
。
关于Java ArrayList不使用重写equals(Object o)方法进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33873579/