前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >hashCode与equals的区别

hashCode与equals的区别

作者头像
xiangzhihong
发布2018-01-26 10:24:06
8420
发布2018-01-26 10:24:06
举报
文章被收录于专栏:向治洪向治洪向治洪

hashCode与equals

HashSetHashMap一直都是JDK中最常用的两个类,HashSet要求不能存储相同的对象,HashMap要求不能存储相同的键。 那么Java运行时环境是如何判断HashSet 中相同对象、HashMap中相同键的呢?当存储了相同的东西之后Java运行时环境又将如何来维护呢? 在研究这个问题之前,首先说明一下JDKequals(Object obj)hashcode()这两个方法的定义和规范:在Java中任何一个对象都具备equals(Object obj)hashcode()这两个方法,因为他们是在Object类中定义的。equals(Object obj)方法用来判断两个对象是否“相同”,如果“相同”则返回true,否则返回falsehashcode()方法返回一个int数,在Object类中的默认实现是“将该对象的内部地址转换成一个整数返回”。

接下来有两个个关于这两个方法的重要规范:

  • 若重写equals(Object obj)方法,有必要重写hashcode()方法,确保通过equals(Object obj)方法判断结果为true的两个对象具备相等的hashcode()返回值。 说得简单点就是: 如果两个对象相同,那么他们的hashcode应该相等。不过请注意:这个只是规范,如果你非要写一个类让equals(Object obj)返回truehashcode()返回两个不相等的值,编译和运行都是不会报错的。不过这样违反了Java规范,程序也就埋下了BUG
  • 如果equals(Object obj)返回false,即两个对象“不相同”,并不要求对这两个对象调用hashcode()方法得到两个不相同的数。 说的简单点就是:“如果两个对象不相同,他们的hashcode可能相同”。
  • 如果两个对象相同,那么它们的hashCode值一定要相同;
  • 如果两个对象的hashCode相同,它们并不一定相同 上面说的对象相同指的是用eqauls方法比较。 你当然可以不按要求去做了,但你会发现,相同的对象可以出现在Set集合中。同时,增加新元素的效率会大大下降。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015/05/05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • hashCode与equals
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档