不写equals 和 hashcode会是false false 是因为在编译期比较吧
两个方法都写了会是 true true 是比较在堆中的对象吧
那只写equals 显示 true false 我就看不懂了import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;class A1{
int a ;
public A1(int a){
this.a = a;
}
}public class Test {
public static void main(String[] args) {
List list = new ArrayList();
Set set = new HashSet();

list.add(new A1(3));
set.add(new A1(3));

System.out.println(list.contains(new A1(3)));
System.out.println(set.contains(new A1(3)));

}
}

解决方案 »

  1.   

    比较都是运行时比较,没有编译时比较这一说。不写 equals 和 hashCode , 则调用继承自 Object 类的 equals 实现,Object 类的 equals 实现比较两个对象的引用地址,相当于 ==重写 equals 而不重写 hashCode 是错误的,两个方法要重写就都重写。hashmap.contains 返回 false 是因为,hashmap 首先检查 hashCode 是不是相等,如果 hashCode 相等,再检查 equals