空检查引发NullPointerException异常
有时会发生,我已经写了代码来检查的NullPointerException像下面,空检查引发NullPointerException异常
if(str!=null)
{
doSomething();
}
和空检查本身将引发NullPointerException异常。
如何解决它。
编辑: 其实这个代码是越来越空指针,
Map params = new HashMap();
if(params != null && params.get("requestType"))
{
//some null safe code goes here
}
我明白晚些时候params.get()被扔空指针异常。
你似乎在说:
if (str != null) {
doSomething();
}
在比较扔NullPointerException
。
也就是说不可能。因此,我希望什么是真正发生的事情是下列之一:
你误解堆栈跟踪和NPE是不是被扔在那里。
实际的代码与说明性的例子有很大的不同。
你不执行,你认为你正在执行的代码。例如,您可能没有重新编译它,或者您可能正在执行
.class
或.jar
文件的陈旧副本。您设法严重混淆了您的IDE。 (有时你可以从迷茫IDE得到非常奇怪的行为...)
这样代码可能给一个NPE,是不是另一个事物的假象,你做错了唯一的情况是如果Java(或IDE)安装受损,或者硬件出现故障。我倾向于打折这些解释。
更新
现在你说:
Map params = new HashMap();
if(params != null && params.get("requestType"))
{
//some null safe code goes here
}
抛出params.get
的NPE。我不得不说这是无稽之谈。
该代码不会编译。
params.get
呼叫不会返回boolean
或可以自动转换为boolean
的内容。如果我们忽略这一点,那么
params.get
在线程限制的地图上只能抛出一个NPE,如果params
是null
。这张地图是线程限制,和以前的检查是为了确保params
不null
。
我以前的结论就是这样。
提示:本可能是一个线程的问题。如果您使用一个线程更新HashMap
并使用另一个线程读取它,并且您没有正确同步,可能会得到间歇性NPE。
你有没有检查过它可以解释我的情况。这是在Java中。 如果它是在Java中,那么这里是一个示例代码,它可以很好地进行交叉检查。 如果它是一个局部变量,它也可以正常工作。
class string
{
static String str;
public static void main(String[] args)
{
if(str!=null)
{
System.out.println("hi");
}
else
{
System.out.println("bye");
}
}
}
这里你已经描述过在你的程序中发生了一个空指针异常。空检查给出空指针异常
if(str!=null)
{
doSomething();
}
这里如果你检查你的完整程序。在这里只有一件事情是错的,那就是str在这里是空的,所以它给了你一个空指针异常。 PLZ检查乌尔计划更多的时间......
使用'!='运算符**的空检查不能**抛出NullPointerException。请删除您的不正确和令人困惑的答案。 – 2014-11-23 14:19:04
你能发布你的完整代码吗? – 2014-11-22 05:34:33
就像你说的那样,你没有代码来“检查NullPointerException”,但是你有检查'null'的代码。这段代码本身不可能抛出一个NullPointerException,所以这个问题必须在你的代码中的其他地方,在你还没有发布到SO的地方。 – 2014-11-22 05:38:14
检查没有抛出异常。也许你做了(str!= null); {}或if(str.foobar()!= null){} – MeBigFatGuy 2014-11-22 05:48:05