关于HahsMap调试出现的问题(已解决)

关于HahsMap调试出现的问题

调试HashMap我想很多人都会遇到 所以大部分新手会在hashMap内部需要调试的地方 加入断点 然后点击Debug 但是程序却在其他地方停下来了??

例子

比如博主在 hashMap构造函数 HashMap(int initialCapacity) 内部加入相应的断点

以下伪代码 在第89行和90行加入断点

    HashMap ....=new HashMap<>(15);
    public HashMap(int initialCapacity) { //89
        this(initialCapacity, DEFAULT_LOAD_FACTOR);//90
    }

但是博主 无论设置初始容量为多少时 都会在initialCapacity为11的时候停下来
问题出现在这里
在这里插入图片描述
initialCapacity 中明明设置了15 为什么在这里变成了11

难道是java的机制自动变成11 还是IDEA的bug(这显然不太可能)
那我们验证一下 后面又分别尝试了

HashMap ....=new HashMap<>(17);
HashMap ....=new HashMap<>(22);

Debug中的initialCapacity都显示11

后面又在EClipse中运行同样的调试代码 initialCapacity同样显示11

那试试从调用栈入手
:467, HashMap (java.util)
:74, Attributes (java.util.jar)
:64, Attributes (java.util.jar)
:51, Manifest (java.util.jar)
getManifestFromReference:194, JarFile (java.util.jar)
getManifest:180, JarFile (java.util.jar)
getManifest:981, URLClassPath$JarLoader$2 (sun.misc)
defineClass:450, URLClassLoader (java.net)
access$100:73, URLClassLoader (java.net)
run:368, URLClassLoader$1 (java.net)
run:362, URLClassLoader 1 ( j a v a . n e t ) d o P r i v i l e g e d : − 1 , A c c e s s C o n t r o l l e r ( j a v a . s e c u r i t y ) f i n d C l a s s : 361 , U R L C l a s s L o a d e r ( j a v a . n e t ) l o a d C l a s s : 424 , C l a s s L o a d e r ( j a v a . l a n g ) l o a d C l a s s : 331 , L a u n c h e r 1 (java.net) doPrivileged:-1, AccessController (java.security) findClass:361, URLClassLoader (java.net) loadClass:424, ClassLoader (java.lang) loadClass:331, Launcher 1(java.net)doPrivileged:1,AccessController(java.security)findClass:361,URLClassLoader(java.net)loadClass:424,ClassLoader(java.lang)loadClass:331,LauncherAppClassLoader (sun.misc)
loadClass:357, ClassLoader (java.lang)
loadClassAndStartAgent:304, InstrumentationImpl (sun.instrument)
loadClassAndCallPremain:401, InstrumentationImpl (sun.instrument)

从调用栈 我们可以看出 代码是在 467中停下来了 也就是我们 设置断点的地方
那是谁调用了这个HashMap 答案在调用栈第二行
Attributes中调用的

构造了一个Map时 遇到断点自然会停下来 此时的initialCapacity始终为11

//调用栈的第三行
public Attributes() {
        this(11);
    }
//调用栈的第二行
 public Attributes(int size) {

        map = new HashMap<>(size);//size 11
    }

也就是说无论待调试的代码是什么都会在此处停下 如果在相应的HaspMap构造函数中设置了断点

这是因为HashMap在很多地方都会使用,不光是你,包括框架,工具,第三方jar都有可能随时使用到

怎么解决呢

注意 博主使用的是IDEA IDEA的整个流程
在断电处单击右键 codition栏中添加 initialCapacity==设置的容量
在这里插入图片描述
然后就会在相应的初始容量中停下来了

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值