关于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 AppClassLoader (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==设置的容量
在这里插入图片描述
然后就会在相应的初始容量中停下来了

发布了8 篇原创文章 · 获赞 0 · 访问量 212

猜你喜欢

转载自blog.csdn.net/qq_40184765/article/details/104070336