The following snippet uses simple Java code.
package pkg;
final public class Main
{
final private class Demo
{
private Integer value = null;
public Integer getValue()
{
return value;
}
}
private Integer operations()
{
Demo demo = new Demo();
return demo==null?new Integer(1):demo.getValue();
}
public static void main(String[] args)
{
Main main=new Main();
System.out.println("Value = " + String.valueOf(main.operations()));
}
}
The above code works as expected with no problem and displays Value = null
on the console.
In the following return
statement,
return demo==null?new Integer(1):demo.getValue();
since the object demo
of type Demo
is not null
, the expression after :
which is demo.getValue()
is executed which invokes getValue()
within the inner Demo
class which returns null
and finally, it is converted to String and displayed on the console.
But when I modify the operations()
method something like the one shown below,
private Integer operations()
{
Demo demo = new Demo();
return demo==null?1:demo.getValue();
}
it throws NullPointerException
. How?
I mean when I use this return
statement
return demo==null?new Integer(1):demo.getValue();
it works (doesn't throw NullPointerException
)
and when I use the following something similar return
statement
return demo==null?1:demo.getValue();
it causes NullPointerException
. Why?