嗨,我在作品中遇到了问题,这样的问题:
Integer test1=null;
Integer test2=null;
我打电话给他们是这样的:test2=(test1==null?test1:(test1+1));
test2=(test1==null?test1:-1);
然后java抛出一个NullPointerException,所以我写了另外一个代码:
test2=(test1==null?test1:test1);
此代码没问题。
但是,为什么呢?
答案 0 :(得分:7)
下面
test2=(test1==null?test1:(test1+1));
表达式将返回int
,而不是Integer
。
因此JVM将取消装箱test1
,然后将结果打包。如果您取消装箱null
,它将抛出一个NPE。
e.g。试试这个:
Integer a = null;
int b = a;
您将在第二行获得NPE。 但肯定这是一个简单的整数赋值!?不是这样。它将取消装箱空。
我强烈建议在涉及Integers
时混淆int
和null
。解决这些问题是一个完全噩梦(我现在正在研究这样的问题,包括返回ints
和Integers
的方法调用,并传递null。一个简单的方法返回意外爆发)。
如果您有一个'可选'整数结果,那么我建议不使用null,而不是某种Optional包装器。
答案 1 :(得分:2)
test2=(test1==null?test1:(test1+1));
相当于
if(test1==null)
{
test2 = test1;
}
else{
test2 = test1 + 1;
}
请注意,你永远不能对null做任何操作(这里你做的是test1 + 1,相当于null + 1。因此空指针异常)
快乐编码:)
答案 2 :(得分:0)
做类似的事情:
test2=(test1==null?test1: new Integer(test1+1));
test2=(test1==null?test1: new Integer(-1));