下面的代码产生一个 NPE:
Integer test = null;
Integer test2 = true ? test : 0;
System.out.println(test2);
要正确打印出“null”而不出现异常,需要以下代码:
Integer test = null;
Integer test2 = true ? test : (Integer)0;
System.out.println(test2);
在第一个示例中很明显,“test”正在被拆箱(转换为原生 int),但为什么呢?为什么更改三元运算符中的另一个表达式(如第二个示例)会修复它?谁能提供某种叙述,说明这两个示例中的内容是何时、什么以及为什么被装箱和拆箱?