equals()与hashcode()

equals()与hashcode()都是Object类定义的方法,实际使用时可override,在覆盖时都须遵守各自的通用约定。

一. 覆盖equals()

1. 覆盖的时机

当某个类的超类未覆盖equals(),而该类又有自身的逻辑相等概念,就需覆盖。覆盖后的equals()用于判断对象在逻辑上是否相等,而非是否指向同一对象。

2. equals()的通用约定

自反性:对象必须等于其自身;
对称性:任何两个对象在“它们是否相等”这个问题上都应保持一致;
传递性:对象一等于对象二,对象二等于对象三,则对象一等于对象三;
一致性:如何两个对象相等,则它们必须始终相等,除非一个对象被改变;
非空性:所有对象都不应等于null。

3. 覆盖equals()时的一些注意事项

3.1 覆盖equals()时总要覆盖hashcode(),否则基于散列码的集合无法正常工作;
3.2 equals()方法仅仅用于判断逻辑上是否相等,如果功能过于复杂容易违反通用约定;
3.3 不要将equals()方法声明中的Object换成其他类,否则它是重载而非重写。

二. 覆盖hashcode()

1.1 在应用程序执行过程中,只要对象的equals方法的比较操作所得到的信息没有被修改,那么对同一对象的多次调用,hashcode()都返回同一值;
1.2 两个对象的equals()结果相等,则其hashcode()结果一定相等,反之不一定;
1.3 两个对象的equals()结果不相等,则其hashcode()结果不一定相等,但对于不同的对象产生不同的散列码将提高散列表的性能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值