Please consider this code snippet:
private static void doSomething(Double avg, Double min, Double sd) {
final Double testMin;
if (avg != null) {
testMin = Math.max(min, avg - 3 * sd);
} else {
testMin = min;
}
System.out.println("testMin=" + testMin);
final Double verwachtMin = avg != null ? Math.max(min, avg - 3 * sd) : min;
System.out.println("verwachtMin=" + verwachtMin);
}
As far as I know (and for what my IDE can tell me), the variables testMin
and verwachtMin
should be equivalent.
As you might expect, I'd rather write the last 2 lines than the first 7. However, when I pass 3 null values to this method, I get an NPE on the calculation of the verwachtMin
variable.
Does anyone know how this can happen? Does the ternary operator evaluate the 2nd part, even when the condition is not true
?
(Java version 1.6.0_21)
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.
Answer: Some of the best practices to avoid NullPointerException are: Use equals() and equalsIgnoreCase() method with String literal instead of using it on the unknown object that can be null. Use valueOf() instead of toString() ; and both return the same result. Use Java annotation @NotNull and @Nullable.
How to avoid the NullPointerException? To avoid the NullPointerException, we must ensure that all the objects are initialized properly, before you use them. When we declare a reference variable, we must verify that object is not null, before we request a method or a field from the objects.
Try:
final Double verwachtMin = avg != null ? new Double(Math.max(min, avg - 3 * sd)) : min;
or
final Double verwachtMin = avg != null ? Double.valueOf(Math.max(min, avg - 3 * sd)) : min;
The types of the alternate sides of the ternary operator were double
and Double
, which means that the Double
gets unboxed to double
, and then on assignment we have a boxing from double
to Double
. If the value of min
is null
then the unboxing NPEs.
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