java 重写equals()方法 和 hashCode()方法

java 学习总结
1.为什么要重写equals()方法?
Object类中equals方法比较的是两个对象的引用地址,只有对象的引用地址指向同一个地址时,才认为这两个地址是相等的,否则这两个对象就不想等。
如果有两个对象,他们的属性是相同的,但是地址不同,这样使用equals()比较得出的结果是不相等的,而我们需要的是这两个对象相等,因此默认的equals()方法是不符合我们的要求的,这个时候我们就需要对equals()方法进行重写以满足我们的预期结果。
在java的集合框架中需要用到equals()方法进行查找对象,如果集合中存放的是自定义类型,并且没有重写equals()方法,则会调用Object父类中的equals()方法按照地址比较,往往会出现错误的结果,此时我们应该根据业务需求重写equals()方法。
2.为什么java中在重写equals()方法后必须对hashCode()方法进行重写?
java 中有关hashCode()方法的equals协定,如果根据 equals()方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode结果应该是相同的;而两个hashCode()返回的结果相等,两个对象的equals()方法不一定相等(生产hashCode 的方法可能不同参数可能不同)。
3.重写 hashCode()方法
int hash = 7;
hash = 31hash+id;
hash = 31
hash+name.getHash()
return hash;
4.重写 equals() 方法
1. if (this == obj) return true; 通本类进行判断
2. if ((obj == null) || (obj.getClass() != this.getClass())) return false; 非空 类型进行判断

 3   Student student = (Student) obj;
    return id == student.getId&& (name == student.getName || (name != null && name.equals(student.getName)));( 业务需求中需要定义并且关心的属性)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值