Java 空检查抛出NullPointerException

Java 空检查抛出NullPointerException,java,exception,nullpointerexception,null,Java,Exception,Nullpointerexception,Null,有时我会编写一个代码来检查NullPointerException,如下所示 if(str!=null) { doSomething(); } 空检查本身抛出NUllPointerException 如何解决这个问题 编辑: 实际上这段代码得到的是空指针 Map params = new HashMap(); if(params != null && params.get("requestType")) { //some null safe code goes

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

if(str!=null)
{
    doSomething();
} 
空检查本身抛出NUllPointerException

如何解决这个问题

编辑: 实际上这段代码得到的是空指针

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

后来我了解到params.get()引发了空指针异常。

您是否正确检查了它?你能给我解释一下情况吗?它是用java写的吗? 如果是Java,那么这里有一个示例代码,可以很好地进行交叉检查。 如果它是一个局部变量,它也可以正常工作

类字符串
{
静态字符串str;
公共静态void main(字符串[]args){
如果(str!=null){
System.out.println(“hi”);
}否则{
System.out.println(“再见”);
}
}
} 

您似乎在说:

if (str != null) {
    doSomething();
}
正在比较中抛出
NullPointerException

那是不可能的。因此,我预计真正发生的是以下情况之一:

  • 您误解了堆栈跟踪,并且NPE没有被抛出

  • 实际代码与示例性示例有本质上的不同

  • 您没有执行您认为正在执行的代码。例如,您可能没有重新编译它。。。或者您可能正在执行
    .class
    .jar
    文件的过期副本

  • 您已经设法严重混淆了IDE。(有时您可能会从混乱的IDE中获得非常奇怪的行为…)


如果您的Java(或IDE)安装损坏,或者您的硬件出现故障,那么该代码可能给出的NPE就不是您做错的其他东西的产物。我认为这些解释基本上是不可信的


更新

现在你说:

Map params = new HashMap();
if(params != null && params.get("requestType"))
{
    //some null safe code goes here
}
参数中抛出一个NPE。get
。我不得不说这是胡说八道

  • 代码无法编译。
    params.get
    调用不会返回
    boolean
    或可自动转换为
    boolean
    的内容

  • 如果忽略编译错误,那么线程限制映射上的
    params.get
    只能在
    params
    null
    时抛出NPE。此映射是线程限制的,前面的检查确保
    params
    不是
    null

  • 我以前的结论是正确的。这是不可能的


    提示:这可能是线程问题。如果你用一个线程更新一个
    HashMap
    ,然后用另一个线程读取它,并且没有正确同步,那么可能会得到间歇性的NPE

    你能发布你的完整代码吗?你没有你说的“检查NullPointerException”的代码,但是你有检查
    null
    的代码。此代码本身不可能抛出NullPointerException,因此问题一定在代码中的其他地方,也就是您尚未发布到的地方。该检查不会引发异常。如果(str!=null),您可能会这样做;{}或者如果(str.foobar()!=null){}当它不处理对象操作时,怎么能抛出NullPointerException呢?最近我在一个支持项目上工作,该文件是jsp文件,用scriptlet编写的代码在上述条件下给出NPE,所以问这个问题,我的结论是,实际项目中的代码与您问题中的示例有很大不同。如果你给我们看错代码,恐怕我们无法给你有意义的答案。这与问题无关。问题在于
    str!=null
    引发异常。