Por que ponteiro nulo em vez de elenco de classe?

26

Em Java:

int count = (Integer) null;

lança uma java.lang.NullPointerException.

Por que isso não gera uma exceção de elenco de classe para facilitar o entendimento do programador?

Por que essa exceção foi escolhida sobre qualquer outra exceção?

Nathan R
fonte

Respostas:

46

Ao executar seu código, o Java Runtime faz o seguinte:

  1. Converter nulo em um objeto da classe Inteiro.
  2. Tente desmarcar o objeto inteiro para um int chamando o método intValue ()
  3. Chamar um método em um objeto nulo lança uma NullPointerException.

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 .

Giorgio
fonte
1

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).

Tulains Córdova
fonte
-1

Desmarcar a Integerem a intie em int i = new Integer(15);, na iverdade é 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 NullPointerExceptionporque ientão é igual a null.intValue()que lança a NullPointerException.

JavaProdigy
fonte
2
A resposta que foi aceita quase dois anos atrás fornece quase a mesma explicação, mas é mais clara. Essa resposta também não está correta para Java 5+: agora ela usa os valueOf()métodos de fábrica em vez de criar novas instâncias para boxe.