A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© whocases 黑马帝   /  2012-6-23 22:40  /  3333 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 whocases 于 2012-6-28 19:42 编辑

在创建一个HashMap集合时,重写hashCode()和equals()方法,运行的顺序是怎样的?

7 个回复

倒序浏览
本帖最后由 黑马张扬 于 2012-6-23 23:22 编辑

判断两个对象是否相等的规则是:
1,判断两个对象的hashCode是否相等
      如果不相等,认为两个对象也不相等,完毕
      如果相等再用equals判断
2,判断两个对象用equals运算是否相等
      如果不相等,认为两个对象也不相等
      如果相等,认为两个对象相等(equals()是判断两个对象是否相等的关键)
回复 使用道具 举报
equals()和hashCode()都来自java.lang.Object,为了维护 hashCode 方法的常规协定,才要求用equals比较的两个对象的hashCode相同
equals():仅当的内存地址相等时,才返回true
hashCode():hashCode()的值也是与内存地址相关的.所以仅当内存地址相等时,hashCode才相等
回复 使用道具 举报
     重写hashCode()时最重要的原因就是:无论何时,对同一个对象调用hashCode()都应该生成同样的值。如果在将一个对象用put()方法添加进HashMap时产生一个hashCode()值,而用get()取出时却产生了另外一个 hashCode()值,那么就无法重新取得该对象了。
   
   首先判断两个对象的 hashCode 是否相等,如果不相等,认为两个对象也不相等,反之如果相等,则用equals()比较。
用equals()比较时,如果不相等,认为两个对象也不相等 ,如果相等,认为两个对象等!
所以在比较对象是否相等时有个顺序,先比较的是对象的hashcode()在用equals()比较
回复 使用道具 举报
车风波 来自手机 中级黑马 2012-6-24 11:27:45
报纸
你重写这两个方法然后加上断点debug一下就行了
回复 使用道具 举报
先执行hashCode()后执行equals()。可以用打印语句测试一下。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马