集团主站
欢迎来到成都达内官方网站!达内—美国上市公司 亿元级外企IT培训企业!
成都it培训哪家好
成都it培训哪家好
全国服务监督电话:15023458194  |   联系客服   |
当前位置:主页 > 培训课程 > Java >

成都java学习之“==”“equals()”、“hashcode()”的使用分享

发布者: 成都达内     浏览次数:     发布时间:2019-07-26 10:40:11

"==":它主要是判断符号两边的“对象”的值是否相等,而这里的“值”又有所区分了。...

  "==":它主要是判断符号两边的“对象”的值是否相等,而这里的“值”又有所区分了。

  ●基础数据类型:比较的就是自身的值,这个跟我们常规的理解是基本一致的。

  ●引用数据类型:比较的对象的内存地址。

  “equals()”:它也是用来判断两个对象是否相等,所以也得分不同的情况来说明。在当前类中,没有重写equals方法的话,默认的实现跟"=="的实现是一样的。下面是Object类的equals方法实现。在当前类中,重写了equals方法,此时判断的依据就是你重写的逻辑。

  怎样重写equals()方法?

  ✍ 1、自反性:对于任何非空引用x,x.equals(x)应该返回true。

  ✍ 2、对称性:对于任何引用x和y,如果x.equals(y)返回true,那么y.equals(x)也应该返回true。

  ✍ 3、传递性:对于任何引用x、y和z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也应该返回true。

  ✍ 4、一致性:如果x和y引用的对象没有发生变化,那么反复调用x.equals(y)应该返回同样的结果。

  ✍ 5、非空性:对于任意非空引用x,x.equals(null)应该返回false。

  由此可以看出,重写一个equals()方法,需要注意的点还是比较多的,这里给出一个参考的事例。

成都java学习之“==”“equals()”、“hashcode()”的使用分享

  有些读者可能会感到奇怪,不是说重写equals()方法吗,为什么这里又出现了一个hashcode()?所以这里又引出了我们的另一个主角hashcode()方法,当我们重写了equals()方法后,它就一定会出现,也会“吵着“自己也要被重写。

  什么是hashcode()?

  hashCode() 的作用是获取哈希码,也称为散列码;它返回的一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。它定义在JDK的Object.java中,这就意味着Java中的任何类都包含有hashCode() 函数。hashCode方法的主要作用是为了配合基于散列的集合一起正常运行,这样的散列集合包括HashSet、HashMap、HashTable等。

  在这种情况下。若要判断两个对象是否相等,除了要覆盖equals()之外,也要覆盖hashCode()函数。否则,equals()无效。

  例如,创建Person类的HashSet集合,必须同时覆盖Person类的equals() 和 hashCode()方法。

  如果单单只是覆盖equals()方法。我们会发现,equals()方法没有达到我们想要的效果。

成都java学习之“==”“equals()”、“hashcode()”的使用分享

  输出结果:

  true,6413875,21174459

  [名字是:dongguangming,年龄是:25, 名字是:gaoyafei,年龄是:25, 名字是:dongguangming,年龄是:25]

  (注:有重复元素dongguangming,年龄是:25两次)

  分析:

  我们重写了Person的equals()。但是,很奇怪的发现:HashSet中仍然有重复元素:dongguangming和 dgm。为什么会出现这种情况呢?

  这是因为虽然dongguangming 和 dgm的内容相等,但是它们的hashCode()不等;所以,HashSet在添加dongguangming和dgm的时候,认为它们不相等。

  下面,我们同时覆盖equals() 和 hashCode()方法。简要代码如下:

成都java学习之“==”“equals()”、“hashcode()”的使用分享

  输出结果:

  true,-1515325931,-1515325931

  false,-1515325931,-1515325931

  [名字是:DONGGUANGMING,年龄是:25, 名字是:dongguangming,年龄是:25, 名字是:gaoyafei,年龄是:25]

  (注:无重复元素dongguangming,年龄是:25一次)

  结果分析:

  这下,equals()生效了,HashSet中没有重复元素。

  比较dongguangming和dgm,我们发现:它们的hashCode()相等,通过equals()比较它们也返回true。所以,dongguangming和dgm被视为相等。

  比较dongguangming和dgm_DGM,我们发现:虽然它们的hashCode()相等;但是,通过equals()比较它们返回false。所以,dongguangming和dgm_DGM被视为不相等。

成都java学习之“==”“equals()”、“hashcode()”的使用分享

  版权声明:文章和图片均来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与达内成都Java培训机构网站联系删除或授权事宜。

(责任编辑:徐老师)
最新开班
  • 成都Java培训班
    免费试听名额发放中...
  • 成都C++培训班
    免费试听名额发放中...
  • 成都PHP培训班
    免费试听名额发放中...
  • 成都网络工程培训班
    免费试听名额发放中...
  • 成都Unity3D培训班
    免费试听名额发放中...
  • 成都大数据培训班
    免费试听名额发放中...
  • 成都uid培训班
    免费试听名额发放中...
  • 成都会计培训班
    免费试听名额发放中...
  • 成都Python培训班
    免费试听名额发放中...
  • 成都嵌入式培训班
    免费试听名额发放中...
  • 成都web培训班
    免费试听名额发放中...
  • 成都软件测试培训班
    免费试听名额发放中...
在线留言
提交

校区地址:成都市锦江区东大街紫东楼端35号明宇金融广场19楼1906室

联系电话:15023458194

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市高新区奥克斯广场蜀锦路209号一楼商铺

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

校区地址:成都锦江区东大街芷泉街229号东方广场C座3楼303

联系电话:15023458194

公交路线:芷泉街(188路;115路;515路;236路;505路;501路;84路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市武侯区佳灵路3号红牌楼广场2号写字楼11楼1115号

联系电话:15023458194

公交路线:红牌楼东(11路;92路;100路;111路;139路;g28路;快速公交K1/K2) 地铁路线:红牌楼站(地铁3号线)

校区地址:成都市锦江区红星路二段70号四川日报大厦502-2

联系电话:15023458194

公交路线:市二医院站(6路;49路;102路;5路;37路;g92路;) 地铁路线:地铁市二医院(地铁3号线)

校区地址:成都市锦江区东大街芷泉段229号东方广场C座16层

联系电话:15023458194

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:四川省成都市武侯区高新科技孵化园9号园区E座7楼

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

校区地址:成都市高新区奥克斯广场B座1708

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

了解达内动态
关注成都达内教育公众号

首页 | 关于达内 | 课程中心 | 专家师资 | 视频教程 | 学员空间 | 校企合作 | 新闻资讯 | 就业指导 | 网站地图

2016-2025 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56