In this code.
public class Test { public static void testFun(String str) { if (str == null | str.length() == 0) { System.out.println("String is empty"); } else { System.out.println("String is not empty"); } } public static void main(String [] args) { testFun(null); } }
We pass a null
value to the function testFun
. Compiles fine, but gives a NullPointerException
in runtime, which I did not expect. Why is it throwing an exception, rather than evaluating the if
condition to true
and printing "String is empty"?
Suppose the value of the actual argument being passed to testFun
is generated from some process. Assume that mistakenly a null
value is returned by that process and is fed to testFun. If such is the case, how does one validate that the value passed to the function is null or not?
One (weird) solution may be by assigning the formal parameter to some variable inside the function and then testing it. But if there are many variables passed to the function, that might become tedious and unfeasible. So, how does one check for null values in such a scenario?
In Java, the java. lang. NullPointerException is thrown when a reference variable is accessed (or de-referenced) and is not pointing to any object. This error can be resolved by using a try-catch block or an if-else condition to check if a reference variable is null before dereferencing it.
What Causes NullPointerException. The NullPointerException occurs due to a situation in application code where an uninitialized object is attempted to be accessed or modified. Essentially, this means the object reference does not point anywhere and has a null value.
The NullPointerException (NPE) typically occurs when you declare a variable but did not create an object and assign it to the variable before trying to use the contents of the variable. So you have a reference to something that does not actually exist.
Use the ISNULL function with the IF statement when you want to test whether the value of a variable is the null value. This is the only way to test for the null value since null cannot be equal to any value, including itself. The syntax is: IF ISNULL ( expression ) ...
The edit shows exactly the difference between code that works and code that doesn't.
This check always evaluates both of the conditions, throwing an exception if str
is null:
if (str == null | str.length() == 0) {
Whereas this (using ||
instead of |
) is short-circuiting - if the first condition evaluates to true
, the second is not evaluated.
See section 15.24 of the JLS for a description of ||
, and section 15.22.2 for binary |
. The intro to section 15.24 is the important bit though:
The conditional-or operator || operator is like | (§15.22.2), but evaluates its right-hand operand only if the value of its left-hand operand is false.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With