Więcej
&& (AND) i || (OR) w wyrażeniach IF
Mam następujący kod:
if(!partialHits.get(req_nr).containsKey(z) || partialHits.get(req_nr).get(z) < tmpmap.get(z)){
partialHits.get(z).put(z, tmpmap.get(z));
}
gdzie partialHits
jest HashMap.
Co się stanie, jeśli pierwsze stwierdzenie będzie prawdziwe? Czy Java nadal będzie sprawdzać drugie stwierdzenie? Ponieważ aby pierwsze stwierdzenie było prawdziwe, HashMap nie powinna zawierać podanego klucza, więc jeśli drugie stwierdzenie zostanie sprawdzone, otrzymam wyjątek NullPointerException
.
Tak więc w prostych słowach, jeśli mamy następujący kod
if(a && b)
if(a || b)
czy Java sprawdziłaby b
jeśli a
jest fałszywe w pierwszym przypadku i jeśli a
jest prawdziwe w drugim przypadku?
125
3
Nie, to nie będzie sprawdzane. Takie zachowanie nazywane jest short-circuit evaluation i jest cechą wielu języków, w tym Javy.
Nie, jeśli a jest prawdziwe (w teście
lub
), b nie będzie testowane, ponieważ wynik testu zawsze będzie prawdziwy, niezależnie od wartości wyrażenia b.Zrób prosty test:
nie będzie nie rzucał wyjątku
NullPointerException
!Nie, Java zrobi zwarcie i przestanie oceniać, gdy będzie znała wynik.