Risposte:
Quando si esegue il codice, il runtime Java procede come segue:
In altre parole, null può essere trasmesso a Integer senza problemi, ma un oggetto intero null non può essere convertito in un valore di tipo int.
MODIFICARE
Ho avuto una domanda correlata qualche tempo fa allo Stack Overflow, vedi qui .
Java esegue correttamente il null a un riferimento intero che non fa riferimento a nessun oggetto.
Va bene perché essere non associati è uno stato valido per un riferimento.
È la chiamata di un metodo di un oggetto inesistente che non può essere eseguito.
Eseguire il cast (Integer)null
equivale a dichiarare una variabile Integer e non riuscire ad assegnargli un'istanza di oggetto Integer nuova (o già esistente).
Per decomprimere a Integer
in a int
ie in int i = new Integer(15);
, i
effettivamente è uguale new Integer(15).intValue()
i = (Integer) o
; dove Object o = 15
è uguale a o = Integer.valueOf(15);
ma i = null
; genera un NullPointerException
perché i
quindi equivale a null.intValue()
un valore di NullPointerException
.
valueOf()
metodi di fabbrica anziché creare nuove istanze per il pugilato.