Por que comparar Integer com int pode gerar NullPointerException em Java?
Foi muito confuso para mim observar esta situação:
Integer i = null;
String str = null;
if (i == null) { //Nothing happens
...
}
if (str == null) { //Nothing happens
}
if (i == 0) { //NullPointerException
...
}
if (str == "0") { //Nothing happens
...
}
Então, como eu acho que a operação de boxe é executada primeiro (ou seja, java tenta extrair o valor int denull
) e a operação de comparação tem prioridade mais baixa, por isso a exceção é lançada.
A questão é: por que é implementado dessa maneira em Java? Por que o boxe tem maior prioridade do que comparar as referências? Ou por que eles não implementaram a verificação contranull
antes do boxe?
No momento, parece inconsistente quandoNullPointerException
é jogado com primitivas embrulhadas e não é jogado comverdadeiro tipos de objetos.