如何重写hashCode方法和equals方法
比如我们新建了一个A类
public class A{
private String userName;
private Integer age;
//省略构造函数
}
此时我们在test类中新建两个A类,其中他们的两个属性都相同,我们用a.equals(b),其中a、b为A类的两个实例,此时我们可以得到false,因为equals比较的是两者的地址
public class Test{
public static void main(String[] args){
....................
}
}
但是我们要让如果两个类的属性如果都相同,他们使用equals的结果应该为true,那我们变要重写equals方法
如何重写equals方法?
在A类中重写equals方法,如下:
@Override
public boolean equals(Object obj){
if(this == obj){
return true;
}
if(obj == null){
return false;
}
if(getClass() != obj.getClass()){
return false;
}
A a =(A)obj;
if(userName.equals(a.userName)&&age.equals(a.age)){
return true;
}
return false;
}
重写了equals方法之后,我们为了满足上面的两个条件,我们必须再重写hashCode方法
如果重写HashCode方法?
@Override
public int hashCode(){
int result = 17;
result = 31 * result + (userName ==null ? 0 : userName.hashCode());
result = 31 * result + (age ==null ? 0 : age.hashCode());
return result;
}