Null Check抛出NullPointerException

时间:2014-11-22 05:31:40

标签: java exception nullpointerexception null

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

if(str!=null)
{
    doSomething();
} 

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

如何解决。

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

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

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

2 个答案:

答案 0 :(得分:10)

你似乎在说:

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。我不得不说这是胡说八道。

  1. 代码不会编译。 params.get来电不会返回boolean或可以自动转换为boolean的内容。

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

  3. 我之前的结论是有道理的。这是不可能的。

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

答案 1 :(得分:0)

你有没有正确检查它可以解释我的情况。它是在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");
}
}
}