I ran across a very weird NPE this morning, and reduced it to a simple example. Is this a JVM bug or correct behavior?
public class Test1 {
class Item {
The return type below is Integer -
public Integer f() {
Item item = new Item();
// this works:
//return item == null ? new Integer(1) : item.getId();
// NPE??
return item == null ? 1 : item.getId();
}
And the result of the following -
item == null ? 1 : item.getId()
is null in your case.
So, JVM is throwing NPE because it is trying to autobox null.
Try -
new Integer(null); // and
Integer.valueOf(null);
both will throw NPE.