Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Null Check throws NullPointerException [closed]

Sometimes it happens that I have written a code to check NullPointerException like below,

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

and the null check itself throws NUllPointerException.

How to solve it.

Edited: Actually this code was getting null pointer,

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

i understood later that params.get() was throwing null pointer exception.

like image 472
prsutar Avatar asked Dec 14 '22 18:12

prsutar


1 Answers

You seem to be saying that:

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

is throwing a NullPointerException in the comparison.

That is impossible. So I expect that what is really happening is one of the following:

  • You have misinterpreted the stack trace, and the NPE is not being thrown there.

  • The actual code is substantially different to the illustrative example.

  • You are not executing the code that you think you are executing. For example, you might not have recompiled it ... or you may be executing a stale copy of the .class or .jar file.

  • You have managed to seriously confuse your IDE. (Sometimes you can get very strange behaviour from a confused IDE ...)


The only situations where that code might give an NPE that is not an artefact of something else you are doing wrong is if have a damaged Java (or IDE) installation, or if your hardware is faulty. I would discount those explanations as basically implausible.


Update

Now you say that:

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

throws an NPE in params.get. I have to say that this is nonsense.

  1. The code won't compile. The params.get call doesn't return something that is boolean or that can be automatically converted to a boolean.

  2. If we ignore the compilation errors, then params.get on a thread-confined map can only throw an NPE if params is null. This map is thread-confined, and the previous check ensures that params isn't null.

My previous conclusions stand. This is impossible.

Hint: this could be a threading problem. It is possible to get intermittent NPE's if you update a HashMap with one thread and read it with another, and you don't synchronize properly.

like image 183
Stephen C Avatar answered Dec 17 '22 09:12

Stephen C