包装类与缓存池
面试官问:"Integer 的缓存池范围是多少?"
候选人小郑答:"-128 到 127。"
面试官追问:"为什么是这个范围?"
小郑说:"JVM 规范的默认配置。"
面试官追问:"能用参数调整吗?"
小郑说:"可以..."
面试官又问:"那 String 的常量池和 Integer 的缓存池有什么区别?"
小郑答不上来。
【面试官心理】 这道题考查的是候选人对 Java 内存管理和自动装箱机制的理解。能说出缓存池范围可配置、以及与 String 常量池区别的候选人,说明对 JVM 有深入了解。
一、Integer 缓存池 🔴
1.1 valueOf 源码
1.2 缓存范围
1.3 缓存池是可配置的
二、所有包装类的缓存池 🔴
三、自动装箱与缓存 🟡
3.1 自动装箱的陷阱
3.2 包装类的 equals vs ==
3.3 数组不是缓存的
四、String 常量池 vs 包装类缓存池 🟡
五、生产避坑 🟡
5.1 switch 的自动装箱
5.2 HashMap 的 key 问题
六、追问升级
面试官:"为什么包装类要设计缓存池?"
【面试官心理】 能说出"减少内存分配"和"提高性能"两个原因的候选人,说明理解了缓存池的设计意图。这是 P6 的标准要求。