2013-06-07 1 views
11

ho scritto il codice breve Java che causano NullPointerException. Qualcuno ha una spiegazione per questo? Codice:Perché NullPointerException si verificano in breve SE

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

Inoltre seguente codice (versione semplificata) causerà NullPointerException:

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

Ma questo:

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

e questo:

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

o questo:

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

non lo fa?

+2

'((val == 1)? True: null)' qui cambia 'null' a' false' ?? – noMAD

+0

Usa 'boolean' piuttosto che' Boolean' per evitare molte NullPointerExceptions – NINCOMPOOP

+0

@TheNewIdiot Che non fa differenza per questo caso –

risposta

-1

in Java, boolean permette solo true e false ma booleano consente truefalse e NULL

+1

così, che cosa è la ragione per la NPE? – sanbhat

+1

Oh Snap, ha voluto che questo è un commento e non una risposta. @ ___ @ – noMAD

4

Penso che quello che sta succedendo è che ((val == 1) ? true : null) restituisce sempre null e poi tenta di unboxing che in un boolean. Ciò causa un'eccezione di puntatore nullo.

Dopo averlo detto, @JonSkeet ha contrassegnato la domanda come duplicata a causa di NullPointerException in ternary expression with null Long La risposta contiene una spiegazione molto più dettagliata.

+0

Allora perché cambiare 'false' a' Boolean.FALSE' nell'esempio correzione NPE? – Jokii

0

int val = 2;

risultato booleano = (val == o)? falsa verità; // rimuove null dal codice e lo sostituisce con vero.