【发布时间】:2013-11-02 01:23:46
【问题描述】:
假设我知道列表 SomeList 包含 thatObj。以下代码是否从 SomeList 中删除了对 thatObj 的引用?
SomeClass el = (SomeClass) thatObj.clone();
SomeList.remove(el);
如果此方法以某种方式比较对象,则无法通过引用找到。直觉建议它应该使用 Object.equals 如果引用指向同一个对象,则返回 true,因此此代码将不起作用。
如果没有,那么还有一个问题:如果没有引用但知道相关对象的所有成员,如何从列表中删除?
【问题讨论】:
-
你的直觉是完全正确的(除非你覆盖
equals())。 -
Object.equals不考虑引用,它考虑了equals实现,它恰好是标准地使用引用。如果你用你自己有意义的实现覆盖equals,你可以删除具有不同引用的相同数据的对象。 -
谢谢!你知道这是在哪里准确描述的吗,因为 Oracle 文档对此含糊不清?
-
@IgorTraskunov:文档明确声明使用了
equals。(o==null ? get(i)==null : o.equals(get(i)))docs.oracle.com/javase/7/docs/api/java/util/…