微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么不在Java中实现equals方法导致内存泄漏

我试图了解内存泄漏的各种原因我看到的样本中的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).

因此,此代码无条件地向地图添加逻辑上不同的条目,因此其大小不受限制地增长.

原文地址:https://www.jb51.cc/java/121653.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐