JAVA 重写equals 方法

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) {
		

	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

*勇往直前*

带你装逼带你飞

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值