上一题下一题

Java 自动拆箱在集合取值和算术表达式中为什么可能触发 `NullPointerException`:说明包装类型、缓存机制与空值传播边界

基础版
来源:huawei高级工程师Java自动拆箱包装类型缓存机制空值传播
草稿该题目为草稿状态,前台公开题库中不可见。
答案解析

包装类型本质上是对象,比如 Integer 对应基本类型 int。集合只能存对象,所以从 List<Integer 、Map<String, Integer 中取值时,拿到的是包装类型;如果取到的值是 null,后续一旦发生自动拆箱,就可能抛出 NullPointerException。

例如:

算术表达式中也一样。只要包装类型参与需要基本类型的运算,编译器就会插入拆箱操作:

即使两个操作数都是包装类型,只要进行加减乘除、比较等运算,也通常会先拆箱:

登录后查看完整内容