有一个函数get()返回一个值,如果它在ArrayDeque中,否则返回 null ,即x可以是某个值或null。如果get()返回x,那么函数B()应该执行一些计算,否则不应该做任何事情。
T get()
{
//compute x
return x;
}
void B()
{
int z;
if(y.get()!=null)
{
z=y.get(); // gives null pointer exception
.....
}
}
问题是y.get()已经返回未赋值给任何变量的值,因此给出了空指针异常。如果我使用if((z=y.get()) != 0)
之类的东西,那么在x为null的情况下它会给出异常。我该如何实现这一功能?
答案 0 :(得分:4)
我怀疑这是ArrayDeque<Integer>
,对吧?
当你有:
int z = y.get();
这就像说:
int z = ((Integer) y.get()).intValue();
只需使用:
Integer z = y.get();
代替。然后,您可以测试z
是否为空。另一方面,如果y.get()
已经返回了一个非空值,那么我很惊讶它是然后返回null
值 - 你希望它返回同样的事情两次,对吧?是否涉及其他线程?
此外,目前还不清楚你的意思是什么:
问题是
y.get()
已经返回未分配给任何变量的值,因此会给出空指针异常。
我在这里看不到“因此”的位置...调用方法并且不将返回值存储在变量中也没关系。如果那是NullPointerException
,那么它确实会建议y
为空。当然,如果您发布一个简短但完整的程序来证明问题,那么所有这些都会更容易诊断。
顺便说一句,目前尚不清楚为什么你首先要拨打y.get()
两次。我会将代码重组为:
void B()
{
Integer z = y.get();
if (z != null)
{
// Use z
}
}
你真的想要两次打电话吗?