java包装类面试核心是理解自动装箱/拆箱原理、integer缓存机制(-128~127)、null导致npe风险、泛型强制使用包装类、方法重载歧义及基本类型与包装类的适用场景。

Java 包装类相关面试题,核心是考察你对基本类型与引用类型转换、缓存机制、自动装箱拆箱原理及潜在陷阱的理解。答得好,不靠死记硬背,而靠讲清“为什么”和“什么时候会出问题”。
搞懂自动装箱/拆箱的底层逻辑
自动装箱(如 Integer i = 100;)本质是编译器插入 Integer.valueOf(100);拆箱(如 int j = i;)则是调用 i.intValue()。这不是语法糖那么简单——它引入了对象创建、空指针风险和性能开销。
- 装箱不是每次 new 对象,而是优先查缓存(如 Integer 缓存 -128~127)
- 拆箱时若包装类变量为 null,运行时抛
NullPointerException - 循环中频繁装箱(如
for (Integer i = 0; i )可能触发大量对象创建,影响性能
掌握缓存范围与 == 判等陷阱
包装类的缓存机制直接影响 == 比较结果,这是高频踩坑点。
Integer a = 100, b = 100; System.out.println(a == b); // true(都在缓存范围内)Integer c = 200, d = 200; System.out.println(c == d); // false(超出默认缓存范围,各自 new 出不同对象)- 永远用
equals()比较值(注意 null 安全:推荐Objects.equals(a, b)) - 缓存范围可配置(如 JVM 参数
-XX:AutoBoxCacheMax=200),但生产环境不建议依赖
识别并规避常见陷阱场景
面试官常通过具体代码片段考察实战敏感度。
-
if 判空后直接拆箱:先判
if (num != null)再用num.intValue(),别写成if (num != null && num > 0)(后者隐式拆箱,null 时 NPE) -
集合泛型必须用包装类:
List<int></int>合法?错!Java 泛型不支持基本类型,List<integer></integer>是唯一选择,装箱不可避免 -
方法重载歧义:传入
1,编译器可能在method(int)和method(Integer)间犹豫,必要时显式强转或指定字面量类型(如method((Integer)1))
能对比原始类型与包装类的适用边界
不是“用了包装类就高级”,关键看场景。
-
选基本类型:高性能计算、数组密集操作、局部变量、避免 GC 压力(如
int[]比Integer[]节省内存且更快) - 选包装类:需要 null 表达“未赋值/缺失值”、泛型容器、反射调用、序列化字段、API 接口参数(如 JSON 反序列化可能返回 null)
- 工具类如
OptionalInt/Optional<integer></integer>的选择也遵循同理:前者更轻量,后者支持 null 语义
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











