Détails
&& ; (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));
}
où 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 ?
125
3
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
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 :
ne lancera pas une
NullPointerException
!Non, Java court-circuite et arrête l'évaluation dès qu'il connaît le résultat.