科迅教育老师直接接听

400-029-09** 400-029-0997 转 23498
查看完整号码
扫码拨号
微信扫码拨号

Java当中的equals和hashCode

内容介绍

在程序设计中,有很多的“公约”,遵守约定去实现你的代码,会让你避开很多坑,这些公约是前人总结出来的设计规范。

 

Object类是Java中的万类之祖,其中,equals和hashCode是2个非常重要的方法。

 

这2个方法总是被人放在一起讨论。最近在看集合框架,为了打基础,就决定把一些细枝末节清理掉。一次性搞清楚!

 

下面开始剖析。

 

public boolean equals(Object obj)

Object类中默认的实现方式是 : return this == obj 。那就是说,只有this 和 obj引用同一个对象,才会返回true。

 

而我们往往需要用equals来判断 2个对象是否等价,而非验证他们的唯 一性。这样我们在实现自己的类时,就要重写equals.

 

按照约定,equals要满足以下规则。

 

自反性: x.equals(x) 一定是true

 

对null: x.equals(null) 一定是false

 

对称性: x.equals(y) 和 y.equals(x)结果一致

 

传递性: a 和 b equals , b 和 c equals,那么 a 和 c也一定equals。

 

一致性: 在某个运行时期间,2个对象的状态的改变不会不影响equals的决策结果,那么,在这个运行时期间,无论调用多少次equals,都返回相同的结果。

equals编写指导

Test类对象有2个字段,num和data,这2个字段代表了对象的状态,他们也用在equals方法中作为评判的依据。

 

在第8行,传入的比较对象的引用和this做比较,这样做是为了 save time ,节约执行时间,如果this 和 obj是 对同一个堆对象的引用,那么,他们一定是qeuals 的。

 

接着,判断obj是不是为null,如果为null,一定不equals,因为既然当前对象this能调用equals方法,那么它一定不是null,非null 和 null当然不等价。

 

然后,比较2个对象的运行时类,是否为同一个类。不是同一个类,则不equals。getClass返回的是 this 和obj的运行时类的引用。如果他们属于同一个类,则返回的是同一个运行时类的引用。注意,一个类也是一个对象。

 

1、 有些程序员使用下面的第二种写法替代第 一种比较运行时类的写法。应该避免这样做。

添加微信咨询
黄老师 @南通科迅教育

获取课程资料+免费试听,体验强师课程!

微信号:ntk******88

立即咨询

“南通科迅教育”是南通科迅计算机技术服务有限公司在教育宝平台开设的店铺,若该店铺内信息涉嫌虚假或违法,请点击这里向教育宝反馈,我们将及时进行处理。

机构评分

环境:4.5师资:4.5服务:4.5效果:4.5

公示信息

店铺名称:南通科迅教育

单位名称:南通科迅计算机技术服务有限公司

账号名称:ntkxjy(136******78)

所属城市:江苏南通

入驻时长:17年

在线客服:在线聊

微信咨询

返回顶部