Java三元运算符拆箱null错误

今天遇到了一个问题。同事代码中有一个三元运算符的表达式,用来设置对象属性,但即使Integer类型,仍然报错“cannot unbox null value”。

代码结构类似:condition1 ? 0 : (condition2 ? 1 : null)

分析:

  1. 内部表达式 condition2 ? 1 : null 的结果类型是 Integer(因为 1 被自动装箱为 Integer,null 是 Integer)。
  2. 外部表达式 condition1 ? 0 : internalResult 中,0 是 int,internalResult 是 Integer。
  3. 整个外部表达式的结果类型被推断为 int,导致需要将 internalResult 拆箱为 int。若 internalResult 为 null,拆箱失败,抛出异常。

总结:

  • 类型一致性:三元运算符的所有分支必须返回相同类型(避免基本类型与包装类型混用)。

  • 自动拆箱陷阱:即使目标变量是 Integer,若表达式内部推断为基本类型,仍会触发拆箱操作。

  • 代码可读性:复杂的三元运算符可拆分为 if-else,提升可维护性。