java中的重写后的equals方法
迷茫
迷茫 2017-04-17 15:45:22
[Java讨论组]

是比较两对象是否具有相同属性的类别的,当ture时为什么其哈希码一样啊,即内存地址一样啊?
比较地址不是==吗?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(1)
迷茫

首先,hashCode和内存地址没关系。

equals的定义是当两个对象等价时返回真,否则返回假。equals的实现通常要对比两个对象中的所有成员变量。如果某些成员变量为容器或对象,则也需要判断两个对象中的容器或对象是否相等。通常来说这是一个代价比较高的操作。

而hashCode的作用是用于hashMap和hashSet中确定存储位置以及在大规模等价比较中完成初筛(比如去重),其定义是当两个对象等价时必然有相等的hashCOde,不等价时尽量拥有不同的hashCode。在去重时,如果没有hashCode,那么需要进行n(n-1)/2次equals,而如果有了hashCode,就只需要进行n次hashCode和n(n-1)/2次int相等判断,然后在hashCode相等时再进行equals比较。效率会高得多。

hashCode的生成方式可以自己决定,可以是所有变量处理为数字后的和,可以是所有变量合并后md5再转为int。也可以是其中部分变量处理后的结果。总之hashCode的实现原则是保证两个equals为真的对象hashCode相同的前提下,使得equals为假的对象hashCode尽可能不同,同时还要提高hashCode自身的执行效率。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号