Đoạn mã sau sử dụng mã Java đơn giản.Unknown NullPointerException trong Java
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()));
}
}
Mã trên hoạt động như mong đợi không có vấn đề và hiển thị Value = null
trên bảng điều khiển.
Trong tuyên bố return
sau,
return demo==null?new Integer(1):demo.getValue();
kể từ khi đối tượng demo
loại Demo
là khôngnull
, khái niệm sau :
đó là demo.getValue()
được thực hiện mà gọi getValue()
trong lớp bên Demo
trả về null
và cuối cùng, nó được chuyển thành Chuỗi và hiển thị trên bảng điều khiển.
Nhưng khi tôi thay đổi operations()
phương pháp giống như một hiển thị dưới đây,
private Integer operations()
{
Demo demo = new Demo();
return demo==null?1:demo.getValue();
}
nó ném NullPointerException
. Làm sao?
Ý tôi là khi tôi sử dụng return
tuyên bố này
return demo==null?new Integer(1):demo.getValue();
nó hoạt động (không ném NullPointerException
)
và khi tôi sử dụng một cái gì đó tương tự như saureturn
tuyên bố
return demo==null?1:demo.getValue();
nó gây ra NullPointerException
. Tại sao?
http://stackoverflow.com/questions/7811608/java-npe-in-ternary-operator-with-autoboxing –
bản sao có thể có của [lạ Java NullPointerException với autoboxing] (http://stackoverflow.com/questions/ 3265948/strange-java-nullpointerexception-with-autoboxing) – Pops