【发布时间】:2014-07-07 20:00:19
【问题描述】:
我有 Client 类,其中包含 Category 对象的 ArrayList。因此,当我想确保存在某种类别对象时(我的意思是类别名称相同),我为类别数组列表调用 .contains() 方法。
我在 Category 类中重写了 .equals() 方法,如下所示:
@Override
public boolean equals(Object object) {
boolean isEqual = false;
Log.d("Category", "IT WORKS");
if (object != null && object instanceof Category) {
isEqual = (this.name == ((Category) object).getName());
}
return isEqual;
}
但是在我能够看到的控制台中,永远不会调用 equals 方法。 为什么会这样?
【问题讨论】:
-
name是字符串吗?如果是这样,您应该使用equals而不是==。此外,您不需要检查null,因为null instanceof SomeClass无论如何都会返回false。这些东西不能解决你的问题,但它们值得一看。 -
尝试调试它肯定会调用,+ 你的
equals()中有一个错误,这里isEqual = (this.name == ((Category) object).getName());我假设name属于String,你使用==而不是@987654332 @ -
您是否也重写了 getHashCode()?你必须在覆盖 equals() 的时候一直这样做。
-
@Matt 为什么要
hashcode()为ArrayList? -
@Jigar 有点反射,我猜。我想你是对的——ArrayList 不太可能使用 hashCode()。我将其视为一般建议 - 如果没有 hashCode(),equals() 迟早会出现问题。