【发布时间】:2012-03-08 07:14:04
【问题描述】:
我有一个问题,我创建了一个 Foo 对象的 ArrayList,我覆盖了 equals 方法,但我无法让 contains 方法调用 equals 方法。我试过同时覆盖equals和hashcode,但它仍然不起作用。我敢肯定有一个合乎逻辑的解释为什么会这样,但我现在无法自己弄明白,哈哈。我只是想要一种方法来查看列表是否包含指定的 id。
这里有一些代码:
import java.util.ArrayList;
import java.util.List;
public class Foo {
private String id;
public static void main(String... args){
Foo a = new Foo("ID1");
Foo b = new Foo("ID2");
Foo c = new Foo("ID3");
List<Foo> fooList = new ArrayList<Foo>();
fooList.add(a);
fooList.add(b);
fooList.add(c);
System.out.println(fooList.contains("ID1"));
System.out.println(fooList.contains("ID2"));
System.out.println(fooList.contains("ID5"));
}
public Foo(String id){
this.id = id;
}
@Override
public boolean equals(Object o){
if(o instanceof String){
String toCompare = (String) o;
return id.equals(toCompare);
}
return false;
}
@Override
public int hashCode(){
return 1;
}
}
输出: 错误的 错误的 假的
【问题讨论】:
-
你为什么要检查愚蠢的包含一个字符串?
-
大约 9 年前我问过这个问题。我现在知道这没有意义,但当时我不明白。感谢这个问题的答案,我现在了解 .equals() 的工作原理。