Here is the deal. This is the last time you will see the NullPointerException error. I promise… Sounds good? Let me tell you a secret that most other engineers have no clue about — a superpower to combat this error (and other errors as well).
You are a programmer and always after exact, to-the-point (no BS) solutions. When you encounter an error, you search Google in a blink of an eye and analyze & copy/paste only the relevant parts from StackOverflow (all happens lightning-fast).
This may surprise you, but I am like that as well… Still, this approach has one downside that hurts your head in the long run.
Let me explain this…
If you are routinely solving the errors without actually understanding the cause, you are bound to forget the solution… In a few weeks, you will hit the exact error again and will not remember how to fix it and what you did to solve it.
If you spend only 5 minutes reading this post till the end, you will understand the NullPointerException error in and out. (Learn it once — use it forever.)
No time is wasted on doing the same thing multiple times. See this as a good investment…
So read on.
What is causing the NullPointerException error in Java?
In simple terms, you are trying to access “something” that is not there (has no useful value)…
That “something” can be a variable, an object, a method, or an element of an array (some more options, but I don’t want to confuse you)…
Here comes the central part.
Look at the error itself: Null Pointer Exception. Think of it for a moment.
Exception simply means an error. So your code errored. Null is a value that you referenced (pointed to) somewhere in your code where some other (than null) value is expected.
Got it? Here are a few examples to make things crystal clear.
1. Declared variable with no value set upfront
In Java, you can declare a variable without specifying its value. Look at the code below.
int a; int b = a + a;
Code line 1: Variable
a has been declared (created), but no value has been assigned to it. What happens in the background is that Java automatically assigns the
null value to the variable
Code line 2: Here, you are trying to do something with variable a. Specifically, you are creating a new variable
b that “uses” variable
BOOOM. The null pointer exception error. Why?
Because the second line contains a reference (variable
a) that points to the
null value. (Points to the value of nothing.)
This example surfaces the core of the error. The exception is born when you reference the null value as if it was not the null but something else.
Let’s look at some other less obvious (and more challenging) examples. Read on.
2. Initialized object with “nothing” as a value
Look now at this example.
The first line defines an object of the
Integer type and calls this object
availableCash. You did not assign any value to the
availableCash variable, so Java does it for you (automatically).
After the first line, the
availableCash variable will have the
In the second line, you are trying to manipulate the variable
availableCash. Here, you are trying to assign it a new value.
Depending on your Java compiler, the code might give you the NullPointerException error or an error that says
availableCash may not have been initialized.
LET’S MAKE ONE THING CLEAR.
Null as a value does not mean that there is no value. Contrary, it means that a variable has a value of Null. True, Null is a sort of “nothing,” BUT it is a regular value just as any other.
Make no mistake, and never think of null as undefined. It is there, it is defined, but it simply means “nothing.”
The limitations come when you try to use that null value in an inappropriate way. (In a way that assumes some other than the
3. Trigger a method on the null object
You may think an object has a non-null value and try to perform some “action” on it. Look at this now.
I define a class called
hashMeNow. Within the class, you see the
void main part that executes when you run the code.
myObj Object is initialized, and its value has been set to
null. The following line
myObj.hashCode() is supposed to return the hash value of
Since I deliberately set the value of
null, the method
hashCode() can only return the nullPointerException error as it cannot operate on the null objects.
hashCode() method works only on the objects of the
Your code is likely much more complex. Maybe you define an object somewhere else and drag it along until finally executing a method on it… To find out that the object has the value of
This is a very common setup that is considered to be your (programmer’s) mistake. Luckily enough, you can trace back the error and investigate why the object has the
null value (when something else is expected).
4. Other causes of the nullPointerException error
Although I covered the most common ones, Java language specifications mention a few more situations that can lead to the error.
Thrown when an application attempts to use
nullin a case where an object is required. These include:
- Calling the instance method of a
- Accessing or modifying the field of a
- Taking the length of
nullas if it were an array.
- Accessing or modifying the slots of
nullas if it were an array.
nullas if it were a
Here is the official nullPointerException documentation. If you need an explanation on any other cause, comment, and I will add it to the post.
How to quickly detect, fix, and avoid the NullPointerException error?
Yes, you can avoid it. I always recommend playing it safe and checking for the null value in your code.
Or you can wait for the disaster to come and catch you unprepared (your choice).
Here is how to check for the
null value from the code directly.
If you work with legacy code bases, making the proper changes and avoiding the error can be hard. In those cases, it is all right if you see the notorious nullPointerException.
Use the stack trace (logs) to track the object across the files/classes until you find the spot where the object was misspecified (or wrongly specified).
Not all the errors are created equal. The nullPointerException error is one of the most common Java errors out there. (Want to know the most common Python error? Read more here.)
As the codebase grows, debugging it and understanding where things have gone south can be very impractical and hard.
You read here that the nullPointerException is a sort of a value error. In other words, you are doing something with a variable that assumes a value other than null.
With three different code examples, you discovered the root cause of more than 90% of the nullPointerException errors.
I did not stop there, but I also showed you a handy way to check for the null value in your code.
You are now equipped with some heavy machinery and are ready to fight the error on your field. Good luck.
P.S. Share your feelings (inclusive frustrations) about this error in the comment section.