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)
这段代码还可以.
但为什么?
这里
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参与.这是一个完整的噩梦来解决这些问题(我看这样的东西,现在涉及到方法调用返回ints和Integers,并通过零左右.一个简单的方法的返回炸毁意外).
如果你有一个'可选'整数结果,那么我建议不要使用null,而是使用某种Optional包装器.