为什么不在Java中实现equals方法导致内存泄漏
发布时间:2020-12-14 05:42:00 所属栏目:Java 来源:网络整理
导读:我试图了解内存泄漏的各种原因我看到的样本中的hashCode()实现了而不是equals().我已经读完了那个,如果一个人被过度骑行,另一个也因为违反合同而被过度骑行. 这是示例代码 import java.util.HashMap;import java.util.Map;public class MemoryLeak {static c
我试图了解内存泄漏的各种原因我看到的样本中的hashCode()实现了而不是equals().我已经读完了那个,如果一个人被过度骑行,另一个也因为违反合同而被过度骑行.
这是示例代码 import java.util.HashMap; import java.util.Map; public class MemoryLeak { static class Key { Integer id; Key(Integer id) { this.id = id; } @Override public int hashCode() { return id.hashCode(); } } public static void main(String[] args) { // TODO Auto-generated method stub Map m = new HashMap(); while (true) for (int i = 0; i < 10000; i++) if (!m.containsKey(i)) m.put(new Key(i),"Number:" + i); } } 我知道我没有故意实现equals()方法.但我想知道为什么会在内部发生内存泄漏. 谢谢 解决方法
如果没有实现Key#equals(),则两个Key实例不会相等,因此Map#containsKey()将始终返回false.此外,您正在检查containsKey(i),但不使用i作为键.即使你确实实现了Key#equals(),那么containsKey检查也是有效的if(true).
因此,此代码无条件地向地图添加逻辑上不同的条目,因此其大小不受限制地增长. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |