Java 自动拆箱在集合取值和算术表达式中为什么可能触发 `NullPointerException`:说明包装类型、缓存机制与空值传播边界
基础版来源:huawei高级工程师Java自动拆箱包装类型缓存机制空值传播
草稿
答案解析
包装类型本质上是对象,比如 Integer 对应基本类型 int。集合只能存对象,所以从 List<Integer 、Map<String, Integer 中取值时,拿到的是包装类型;如果取到的值是 null,后续一旦发生自动拆箱,就可能抛出 NullPointerException。
例如:
算术表达式中也一样。只要包装类型参与需要基本类型的运算,编译器就会插入拆箱操作:
即使两个操作数都是包装类型,只要进行加减乘除、比较等运算,也通常会先拆箱:
登录后查看完整内容
