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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© anqi 中级黑马   /  2014-4-7 12:40  /  1150 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 anqi 于 2014-4-7 12:42 编辑

刚才看到一个帖子找不到了,说的是如果重写了一个类的hashCode方法(返回值都是60)
那么new2个新对象。那么这2个对象是不是相当呢?(用==判断)。结果是不相等。
hashCode是什么?它不是内存的地址值,只是根据内存地址利用hash算法算出来的身份证.我们日常中也见过如md5码,二维码
hashCode方法和equals方法只是人为的让计算机把相同属性的对象看作一个。但2个对象绝不可能存储到一个内存空间中。
而==方法是比较的内存地址值。这个才是唯一的。==的方法也不能被复写。
HashCode方法一般在集合的时候才有用,它的意义是希望jvm利用哈希值快速定位存入对象的位置(如同数组的角标)。
而equals方法意义是按编程者希望虚拟机按自己的意思判断对象是否相当。类都有equals方法,他们继承自object类。(利用==)
所以这个方法一般要被按编程者的意愿重写。如各种包装类(Integer,Double,....)String 类
而在Hash类型集合中如果hashCode相同,equals不同,集合就按链式的方法存储hashcode相同元素。大大降低了效率。
所以我们重写equals时候也要重写hashCode方法。使equals和hashCode保持一致的判断。

评分

参与人数 1黑马币 +2 收起 理由
枫儿 + 2 赞一个!

查看全部评分

1 个回复

倒序浏览
谢谢楼主,学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马