Java三元运算符拆箱null错误
今天遇到了一个问题。同事代码中有一个三元运算符的表达式,用来设置对象属性,但即使Integer类型,仍然报错“cannot unbox null value”。
代码结构类似:condition1 ? 0 : (condition2 ? 1 : null)
分析:
- 内部表达式 condition2 ? 1 : null 的结果类型是 Integer(因为 1 被自动装箱为 Integer,null 是 Integer)。
- 外部表达式 condition1 ? 0 : internalResult 中,0 是 int,internalResult 是 Integer。
- 整个外部表达式的结果类型被推断为 int,导致需要将 internalResult 拆箱为 int。若 internalResult 为 null,拆箱失败,抛出异常。
总结:
-
类型一致性:三元运算符的所有分支必须返回相同类型(避免基本类型与包装类型混用)。
-
自动拆箱陷阱:即使目标变量是
Integer
,若表达式内部推断为基本类型,仍会触发拆箱操作。 -
代码可读性:复杂的三元运算符可拆分为
if-else
,提升可维护性。
上一篇: Spring Boo
下一篇: null 和unde