JAVA 自动生成hashCode()和equals()方法

环境为eclipse/Myeclipse

如果是自己写的类,一般需要重写hashCode()和equals()方法,用eclipse/Myeclipse可以自动生成,

快捷键Alt+Shift+S

选择我选中的这个

勾选参数后,点击OK,就生成啦

        @Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Person other = (Person) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}

比较对象是否相同时,会先比较他们的hashCode,如果相同,才会调用equals。

计算hashCode时为什么选择31呢?
     * 1.31是一个质数,质数是能被1和自己本身整除的数
     * 2.31这个数既不大也不小
     * 3.31这个数好算,2的五次方-1,2向左移动5位
 

equals方法重写的详细解释   

        @Override
	public boolean equals(Object obj) {
		if (this == obj)						//调用的对象和传入的对象是同一个对象
			return true;						//直接返回true
		if (obj == null)						//传入的对象为null
			return false;						//返回false
		if (getClass() != obj.getClass())		                //判断两个对象对应的字节码文件是否是同一个字节码
			return false;						//如果不是直接返回false
		Person other = (Person) obj;			                //向下转型
		if (age != other.age)					        //调用对象的年龄不等于传入对象的年龄
			return false;						//返回false
		if (name == null) {						//调用对象的姓名为null
			if (other.name != null)				        //传入对象的姓名不为null
				return false;					//返回false
		} else if (!name.equals(other.name))	                        //调用对象的姓名不等于传入对象的姓名
			return false;						//返回false
		return true;							//返回true
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值