2016-01-17 16 views
9

Come mai javac non emette errori su questo codice?Perché java consente NPE

private static int compute(int v) { 
    return v == 0 ? null : v; 
} 

Sicuramente, compute(0) getteranno NullPointerException. Mi aspetto che il compilatore Java per evitare questo facendo un po 'di analisi statica del codice di base, proprio come avrebbe impedito

private static int compute(int v) { 
    if (v == 0) 
     return null; 
    else 
     return v; 
} 

risposta

5

Perché Java permette NPE?

per indicare una condizione di eccezionale(e consentire al programmatore potenzialmente recuperare).

Nell'esempio, Java consente sia autoboxing e unboxing. Il casella il int a un Integer (che è quindi unboxed a un int).

+2

Oh capisco. 'v == 0? null: v' induce il tipo Integer e trucchi il compilatore. Continuo a pensare che sia stupido. – milan

+0

Questo è uno dei motivi per cui l'uso dell'operatore ternario è generalmente considerato da alcuni come una cattiva pratica. Molti sviluppatori new to Java lo vedono e pensano che sia un'opportunità per ridurre la verbosità in realtà è un ottimo modo per causare bug difficili da trovare. – CheeseFerret

Problemi correlati