Null Check抛出NullPointerException

prs*_*tar 2 java null exception nullpointerexception

有时碰巧我编写了一个代码来检查NullPointerException,如下所示,

if(str!=null)
{
    doSomething();
} 
Run Code Online (Sandbox Code Playgroud)

并且null检查本身会抛出NUllPointerException.

如何解决它.

编辑:其实这段代码是空指针,

Map params = new HashMap();
if(params != null && params.get("requestType"))
{
    //some null safe code goes here
}
Run Code Online (Sandbox Code Playgroud)

我后来才知道params.get()抛出空指针异常.

Ste*_*n C 10

你好像在说:

if (str != null) {
    doSomething();
}
Run Code Online (Sandbox Code Playgroud)

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
}
Run Code Online (Sandbox Code Playgroud)

抛出一个NPE params.get.我不得不说这是胡说八道.

  1. 代码不会编译.该params.get调用不会返回boolean可以自动转换为a的内容boolean.

  2. 如果我们忽略编译错误,那么params.get线程限制地图上只能如果抛出NPE paramsnull.此映射线程限制的,之前的检查确保params不是null.

我先前的结论是有道理 这是不可能的.

提示:这可能是一个线程问题.如果您HashMap使用一个线程更新a 并使用另一个线程读取它,并且您没有正确同步,则可能会出现间歇性NPE .