我尝试使用重写的HashSet
方法在java 8中使用.equals()
。以下是我使用的代码示例:
import java.util.HashSet;
public class Test{
String id;
int a;
public Test (String i, int a){
this.id = i;
this.a = a;
}
@Override
public boolean equals(Object obj){
if (obj instanceof Test){
if (((Test)obj).id == this.id){
return true;
}
}
return false;
}
public static void main(String[] args){
HashSet<Test> set = new HashSet<Test>();
Test a = new Test("hello", 1);
Test b = new Test("hello", 2);
System.out.println("equals?\t\t" + a.equals(b));
set.add(a);
System.out.println("contains b?\t" + set.contains(b));
System.out.println("contains a?\t" + set.contains(a));
System.out.println("specific?\t" + (b == null ? a == null : b.equals(a)));
}
}
这是输出:
equals? true
contains b? false
contains a? true
specific? true
正如您所看到的,.equals()
按预期传递,但contains()
的行为并不像我预期的那样。
根据documentation,contains()
应该传递&#34;当且仅当此集合包含元素e时(o==null ? e==null : o.equals(e))
&#34;。我运行了那个确切的代码然后通过,那么为什么contains()
仍然失败?