关于JAVA的equals方法和hashCode方法

在java集合中,重写equals方法时重写hashCode方法,是因为如果不重写hashCode方法,两个对象equals相等,却因为hashCode不等而同时被添加到了一个集合中,违背了一些集合不能放置重复元素的规定。但是有一个疑问,当你重写了这两个方法后,如果对一个对象的属性做了修改,那么这个对象的hashCode就会发生变化,那么原来对象存放的位置就找不到了,这样就发生了内存泄露。想请教一下是不是我说的这样,如果不是还望能纠正一下,如果是的话,怎么才能解决内存泄露的问题。有木有知道的人回答一下,不胜感激🙏🙏🙏🌝🌝🌝
全部评论
是的,说的没错,用某个对象作为hashmap的key,该对象用成员变量重写了hashcode和equals,一旦你修改了该对象的属性,hashmap中这个键值对就再也拿不出来了,也就是产生了“丢失”。所以一般情况下,hashmap的key被设计为immutable的对象,比如string
4 回复 分享
发布于 2016-10-04 09:59
hashcode和存放的位置有什么关系?只能说hashcode在Object中的实现是返回该对象的物理地址,重写了hashcode如果你的hashcode实现中用了某个属性值,虽然hashcode返回值会发生变化,但是跟内存泄露一点关系都没有,内存泄露是指一个对象中持有另一个对象的引用导致还对象不能被回收会导致内存泄露。你说的那种情况只要垃圾回收器检测到该对象可以被回收,就会正常回收这个对象,何来内存泄露?
点赞 回复 分享
发布于 2016-10-04 09:46

相关推荐

不愿透露姓名的神秘牛友
11-13 18:01
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务