&&amp ; (AND) et || (OR) dans les instructions IF

J'ai le code suivant :

if(!partialHits.get(req_nr).containsKey(z) || partialHits.get(req_nr).get(z) < tmpmap.get(z)){  
    partialHits.get(z).put(z, tmpmap.get(z));  
}

partialHits est une HashMap.
Que se passera-t-il si la première affirmation est vraie? Java vérifiera-t-il quand même la deuxième affirmation? Parce que pour que la première affirmation soit vraie, la HashMap ne doit pas contenir la clé donnée, donc si la deuxième affirmation est vérifiée, j'obtiendrai NullPointerException.
Donc, en termes simples, si nous avons le code suivant

if(a && b)  
if(a || b)

Java vérifierait-il b si a est faux dans le premier cas et si a est vrai dans le deuxième cas ?

Non, il ne sera pas vérifié. Ce comportement est appelé [évaluation en court-circuit][1] et est une fonctionnalité de nombreux langages, dont Java.

[1] : http://en.wikipedia.org/wiki/Short-circuit_evaluation

Commentaires (1)

Non, si a est vrai (dans un test ou), b ne sera pas testé, car le résultat du test sera toujours vrai, quelle que soit la valeur de l'expression b.

Faites un test simple :

if (true || ((String) null).equals("foobar")) {
    ...
}

ne lancera pas une NullPointerException !

Commentaires (0)

Non, Java court-circuite et arrête l'évaluation dès qu'il connaît le résultat.

Commentaires (0)