自动装箱与拆箱
面试官问:"什么是自动装箱和拆箱?"
候选人小熊答:"自动装箱是 int 转 Integer,拆箱是 Integer 转 int。"
面试官追问:"自动装箱发生在什么时候?"
小熊说:"在需要的时候?"
面试官又问:"下面这段代码会输出什么?"
小熊说:"c==d 是 true,e==f 是 false?"
面试官:"为什么?"
小熊答不上来。
【面试官心理】 这道题考查的是候选人对自动装箱和 Integer 缓存池联动关系的理解。能说出"自动装箱调用 valueOf"和"缓存范围"的候选人,说明理解了 Java 的装箱机制。
一、什么是自动装箱/拆箱 🔴
1.1 定义
1.2 编译器层面的转换
二、自动装箱的源码 🔴
三、自动装箱与缓存池的联动 🔴
3.1 缓存范围内的比较
3.2 超出缓存范围的比较
四、自动装箱的性能陷阱 🔴
4.1 循环中的自动装箱
4.2 HashMap 的性能问题
五、常见陷阱 🟡
5.1 null 与拆箱
5.2 算术运算中的自动拆箱
5.3 equals 比较中的自动装箱
六、生产避坑 🟡
6.1 三元运算符的陷阱
6.2 方法参数的类型匹配
七、追问升级
面试官:"为什么自动装箱要用 valueOf 而不是 new?"
【面试官心理】 能说出"缓存复用"和"节省内存"两个原因的候选人,说明理解了 Java 的性能优化机制。这是 P6 的要求。