自动拆箱遇null会抛npe,因其本质是调用包装类的intvalue()等实例方法,而null无法调用任何方法;典型场景包括算术运算、==比较、传参给基本类型方法及stream maptoint等。

算术运算或赋值给基本类型变量
只要包装类变量参与加减乘除、比较或直接赋给基本类型,编译器就会插入拆箱调用。
-
Integer a = null; int b = a + 1; → 实际执行
a.intValue() + 1,NPE -
Double d = null; double x = d; → 等价于
d.doubleValue(),NPE - Long sum = null; return sum.longValue();(显式写也一样崩溃)
与基本类型做 == 或 != 比较
这种写法看似安全,实则隐含拆箱,极易被忽略。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
Integer status = null; if (status == 0) { ... } → 编译后是
status.intValue() == 0,NPE -
Boolean flag = null; if (flag == true) → 触发
flag.booleanValue(),NPE
作为参数传入只接受基本类型的方法
方法签名要求原始类型,传入 null 包装类时 JVM 自动拆箱。
-
Math.max(Integer.MAX_VALUE, null) → 第二个参数需转为
int,调用null.intValue(),NPE -
Arrays.sort(int[] arr) 接收的是原始数组,若你误用
Integer[]转换逻辑出错,也可能间接暴露拆箱风险
Stream 或集合操作中隐式拆箱
函数式编程中容易放松警惕,尤其在 mapToInt、mapToLong 等转换环节。
-
List
list = Arrays.asList(1, null, 3); list.stream().mapToInt(i -> i).sum(); → 遇到 null 时执行i.intValue(),NPE -
Optional.ofNullable(someInteger).orElse(0) + 1 安全;但若写成
someInteger + 1就危险
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










