Java 空检查抛出NullPointerException
有时我会编写一个代码来检查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
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
引发异常。