Respostas:
Ao executar seu código, o Java Runtime faz o seguinte:
Em outras palavras, nulo pode ser convertido em Inteiro sem problemas, mas um objeto inteiro nulo não pode ser convertido em um valor do tipo int.
EDITAR
Eu tive uma pergunta relacionada há um tempo atrás no Stack Overflow, veja aqui .
O Java lança com êxito nulo para uma referência Inteira que não faz referência a nenhum objeto.
Tudo bem, porque ser não autorizado é um estado válido para uma referência.
É a chamada de um método de um objeto inexistente que não pode ser executado.
Executar a conversão (Integer)null
é o mesmo que declarar uma variável Inteiro e falhar em atribuir a ela uma nova instância de objeto Inteiro (ou já existente).
Desmarcar a Integer
em a int
ie em int i = new Integer(15);
, na i
verdade é igual new Integer(15).intValue()
i = (Integer) o
; onde Object o = 15
é o mesmo que o = Integer.valueOf(15);
mas i = null
; lança um NullPointerException
porque i
então é igual a null.intValue()
que lança a NullPointerException
.
valueOf()
métodos de fábrica em vez de criar novas instâncias para boxe.