2013-06-07 16 views
11

NullPointerException neden kısa Java kodu yazdım. Bunun için herhangi bir açıklaması var mı? Kod:NullPointerException neden kısa bir sürede ortaya çıkıyor IF

int val = 2; 
Boolean result = (val == 0) ? false : ((val == 1) ? true : null); 

Ayrıca aşağıdaki (basitleştirilmiş versiyonu) kodu neden olur NullPointerException:

Object result = (false) ? false : (false ? true : null); 

Ama bu:

int val = 2; 
Boolean result = (val == 0) ? Boolean.FALSE : ((val == 1) ? true : null); 

ve bu:

Object result = (false) ? Boolean.FALSE : (false ? true : null); 

veya bu:

Object result = (false) ? (Boolean)false : (false ? true: null); 

değil?

+2

((val == 1)? True: null) '' false '' null'ı değiştir – noMAD

+0

Pek çok NullPointerExceptions'dan kaçınmak için 'Boolean' yerine 'boolean' kullanın – NINCOMPOOP

+0

@ TheNewIdiot Bu durum için bir fark yaratmıyor Bu, –

cevap

-1

Java, boolean sadece true ve false verir ama Boole truefalse ve NULL

+1

, NPE'nin nedeni nedir? – sanbhat

+1

Oh çıtçıt, bunun bir yorum ve cevap değil olmasını istedi. @ ___ @ – noMAD

4

Neler düşünüyorum verir ((val == 1) ? true : null) hep null döndürdüğünü ve daha sonra bir boolean içine Unbox çalışır. Bu, boş bir işaretçi istisna neden olur.

Bunu söyledikten sonra, @JonSkeet, NullPointerException in ternary expression with null Long yüzünden sorunuzu iki kat olarak işaretledi. Cevabın daha ayrıntılı bir açıklaması var.

+0

Niçin 'yanlış' '' Boolean.FALSE '' olarak değiştirmek örneğin NPE'yi düzeltiyor? – Jokii

0

int val = 2;

boolean result = (val == o)? yanlış doğru; // null kodunu kaldırın ve doğru olarak değiştirin.

İlgili konular