直接上代码吧
hashcode相等,对象不一定相等
两个对象相等,hashcode一定相等
public class Test{
Integer age;
String name;
public static void main(String[] args) {
Test t1 = new Test(18,"aaa");
Test t2 = new Test(18,"aaa");
System.out.println(t1.equals(t2)); // true
System.out.println(t1 == t2); //false
//到这里都还没问题,完全可以不用重写equals
Map<Test,String> map = new HashMap();
map.put(t1,"aaa");
map.put(t2,"ccc");
System.out.println(map.get(t1));
/**
如果重写了hashcode ,那么t1.hashcode() == t2.hashcode()
System.out.println(map.get(t1)); // ccc
如果没重写,那么输出aaa
**/
}
public Test(Integer age,String name) {
this.age = age;
this.name = name;
}
@Override
public boolean equals(Object obj){
if(obj == null) return false;
if(this == null) return false;
if(getClass() != obj.getClass()) return false;
Test test = (Test) obj;
if(age != test.age) return false;
if(name == null) {
if(test.name == null){
return false;
}
}else if (!name.equals(test.name)) {
return false;
}
return true;
}
}