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?

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 .


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


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


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.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.