JAVA 重写equals 方法
1.为什么要重写equals 方法
java 俩个对象比较时,其实比较的是俩个对象的地址,如果想要比较俩个对象的值(或者我们自定义相等的条件),这个时候我们就要重写equals 方法。
怎样重写equals方法,重写时需要注意什么呢
重写equals,我们一般要同时重写hashcode 方法,这是因为通常我们认为相等的俩个对象,hashcode 也应该相等
代码如下:
package test1;
public class EquslaAndHashCodeTest {
private int id; //客户id
private String name;//客户名称
private String certf_typr;//客户证件类型
private String certf_code;//客户证件号码
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((certf_code == null) ? 0 : certf_code.hashCode());
result = prime * result
+ ((certf_typr == null) ? 0 : certf_typr.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
//1.表示当前对象的地址和 obj 地址相等,俩个对象地址相等,说明这俩个对象就是同一个对象,自己和自己比,一定相等
if (this == obj)
return true;
if (obj == null)//对象为空,不相等
return false;
//比较当前对象的类型,只有同一个类型的对象,才能有相等的可能,
//例如,有一个Person 对象和当前EquslaAndHashCodeTest 的属性完全一样,属性值也一样,不能认为他俩相等
if (getClass() != obj.getClass())
return false;
//类型转换
EquslaAndHashCodeTest other = (EquslaAndHashCodeTest) obj;
//比较我们认为相等的值的条件,EquslaAndHashCodeTest 有四个属性,我可以定义 除了id 外,
//其他三个属性相等则认为相等
if (certf_code == null) {
if (other.certf_code != null)
return false;
} else if (!certf_code.equals(other.certf_code))
return false;
if (certf_typr == null) {
if (other.certf_typr != null)
return false;
} else if (!certf_typr.equals(other.certf_typr))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCertf_typr() {
return certf_typr;
}
public void setCertf_typr(String certf_typr) {
this.certf_typr = certf_typr;
}
public String getCertf_code() {
return certf_code;
}
public void setCertf_code(String certf_code) {
this.certf_code = certf_code;
}
public static void main(String[] args) {
}
}