Java三元运算符和NullPointerException

xia*_*ang 1 java ternary-operator nullpointerexception

嗨,我在作品中遇到了问题,这样的问题:

Integer test1=null;
Integer test2=null;
Run Code Online (Sandbox Code Playgroud)

我称之为:

test2=(test1==null?test1:(test1+1));
test2=(test1==null?test1:-1);
Run Code Online (Sandbox Code Playgroud)

然后java抛出一个NullPointerException,所以我想写另一个代码:

test2=(test1==null?test1:test1); 
Run Code Online (Sandbox Code Playgroud)

这段代码还可以.

但为什么?

Bri*_*new 7

这里

test2=(test1==null?test1:(test1+1));
Run Code Online (Sandbox Code Playgroud)

表达式将返回一个int,而不是一个Integer.

因此JVM将取消装箱test1,然后将结果打包.如果你打开一个null,它会抛出一个NPE.

试试这个:

    Integer a = null;
    int b = a;
Run Code Online (Sandbox Code Playgroud)

你会在第二行找到一个NPE.但肯定这是一个简单的整数赋值!?不是这样.它将取消装箱空.

我强烈建议不要混合Integers,int什么时候null参与.这是一个完整的噩梦来解决这些问题(我看这样的东西,现在涉及到方法调用返回intsIntegers,并通过零左右.一个简单的方法的返回炸毁意外).

如果你有一个'可选'整数结果,那么我建议不要使用null,而是使用某种Optional包装器.