避免包装类空指针的核心是理解自动拆箱——null调用intvalue()等方法必抛npe;需用objects.requirenonnull拦截参数、optional封装返回值、空集合替代null、objects.equals规避布尔拆箱。

躲开包装类空指针坑,关键不是背答案,而是理解「自动拆箱」这个触发点——它才是绝大多数面试题埋雷的地方。
看清陷阱本质:null 拆箱必炸
面试官最爱问的代码,比如:
Integer a = null; int b = a; // 直接抛 NPE
这行看似简单,实际执行的是 a.intValue()。而 null 调用任何实例方法,JVM 立刻报错。所有数字包装类(Integer/Long/Float/Double)和 Boolean 都适用这条规则。
常见变体题还包括:
- if (a != 100) —— a 是 null 的 Integer,比较前自动拆箱
- map.get("key") || true —— Boolean 拆箱成 boolean,null 就崩
- "" + boolValue —— 字符串拼接触发 append(boolean),底层仍是 boolValue()
参数传入时就拦住 null
方法接收包装类参数,别等它进方法体再判空。用 Objects.requireNonNull 主动拦截:
public void processId(Integer id) {
Objects.requireNonNull(id, "id 不能为空");
// 后续逻辑可放心当非 null 处理
}
这样异常堆栈直接指向调用方,而不是深埋在业务逻辑里,排查效率高得多。
返回值用 Optional 显式表达“可能没有”
别写 return null;,改用 Optional
public Optional<integer> findScore(String name) {
Integer score = db.load(name);
return Optional.ofNullable(score);
}</integer>
调用方必须显式处理有无值的情况:ifPresent、orElse、map 等,没法绕开,也就没法漏判。
集合和布尔值场景要特别小心
集合字段默认为 null 是高频雷区:
- DAO 层查不到数据 → 返回 null List → 上层 .size() 或 for-each 崩
- Map.get() 返回 null Boolean → 直接赋给 boolean 变量或参与逻辑运算
正确做法:
- 集合返回用 Collections.emptyList()、Set.of() 等空容器,永不返回 null
- 布尔判断统一用 Objects.equals(a, b) 或 Boolean.TRUE.equals(flag),避开拆箱
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











