Eu tenho o seguinte código:
if(!partialHits.get(req_nr).containsKey(z) || partialHits.get(req_nr).get(z) < tmpmap.get(z)){
partialHits.get(z).put(z, tmpmap.get(z));
}
onde partialHits
é um HashMap.
O que acontecerá se a primeira declaração for verdadeira? O Java ainda verificará a segunda declaração? Porque para que a primeira declaração seja verdadeira, o HashMap não deve conter a chave dada, então se a segunda declaração for verificada, eu obterei `NullPointerException'.
Portanto, em palavras simples, se tivermos o seguinte código
if(a && b)
if(a || b)
Java verificaria b' se
a' é falso no primeiro caso e se `a' é verdadeiro no segundo caso?
Não, não vai ser verificado. Este comportamento é chamado avaliação de curto-circuito e é uma característica em muitas linguagens, incluindo Java.
Não, se a for verdadeiro (num teste "ou"), b não será testado, pois o resultado do teste será sempre verdadeiro, qualquer que seja o valor da expressão b.
Faça um teste simples:
if (true || ((String) null).equals("foobar")) {
...
}
não **não*** lançará um NullPointerException
!