public class Test {
public static void main(String[] args) {
String s = null;
String s1 = null;
Integer i = null;
Integer i1 = null;
System.out.println(s+i);
System.out.println(i+s);
System.out.println(s+s1);
try {
System.out.println(i+i1);
} catch (NullPointerException np) {
System.out.print("NullPointerException");
}
}
}
The question is simple – why do I receive a NullPointerException only at the last line?
Your code makes use of two different additive operators. The first three lines use string concatenation, whereas the last one uses numeric addition.
String concatenation is well-defined to turn
nullinto"null":Hence there is no NPE.
Adding two
Integerobjects together requires them to be unboxed. This results in thenullreference being dereferenced, which leads to the NPE: