Java ArrayList不使用重写equals(Object o)方法进行比较

标签 java arraylist equals

为什么 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/

相关文章:

java - Jooq/PostgreSQL INSERT 子句中的反斜杠

java - 如何使用 DOM 检查返回的服务器代码?

列表类型不同时工作的 Java 列表数组

java - 在Java中,相同类型但不同类型参数的空集合总是相等吗?

c# - IEqualityComparer<T> 和 IEquatable<T> 有什么区别?

java - 方法 : java. util.Date.parse() 的无签名适用于参数类型

java - 选择打印机(带对话框)打印 .xls 文件到

java - 将前几个元素分组在一起

java - 如何从 Android Java 中的另一个类访问 ArrayList?

C++ wchar_t * 等于对其他 wchar_t * 不区分大小写