Am următorul cod:
if(!partialHits.get(req_nr).containsKey(z) || partialHits.get(req_nr).get(z) < tmpmap.get(z)){
partialHits.get(z).put(z, tmpmap.get(z));
}
unde partialHits
este un HashMap.
Ce se va întâmpla dacă prima instrucțiune este adevărată? Va mai verifica Java a doua instrucțiune?** Pentru că pentru ca prima instrucțiune să fie adevărată, HashMap nu trebuie să conțină cheia dată, deci dacă a doua instrucțiune este verificată, voi primi NullPointerException
.
Deci, în cuvinte simple, dacă avem următorul cod
if(a && b)
if(a || b)
ar verifica Java b
dacă a
este fals în primul caz și dacă a
este adevărat în al doilea caz?
Nu, nu va fi verificat. Acest comportament se numește evaluare în scurtcircuit și este o caracteristică a multor limbaje, inclusiv Java.
Nu, dacă a este adevărat (într-un test or
), b nu va fi testat, deoarece rezultatul testului va fi întotdeauna adevărat, oricare ar fi valoarea expresiei b.
Realizați un test simplu:
if (true || ((String) null).equals("foobar")) {
...
}
nu va nu arunca o NullPointerException
!