Turiu tokį 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));
}
kur partialHits
yra HashMap.
Kas nutiks, jei pirmasis teiginys bus teisingas? Ar Java vis tiek tikrins antrąjį teiginį? Nes tam, kad pirmasis teiginys būtų teisingas, HashMap neturi būti duoto rakto, todėl jei bus tikrinamas antrasis teiginys, gausiu NullPointerException
.
Taigi paprastai tariant, jei turime tokį kodą
if(a && b)
if(a || b)
ar Java tikrintų b
, jei a
pirmuoju atveju yra false, o antruoju atveju - jei a
yra true?
Ne, ji nebus tikrinama. Toks elgesys vadinamas trumpojo ciklo įvertinimu ir yra daugelio kalbų, įskaitant "Java", savybė.
Ne, jei a yra teisinga (ar
teste), b nebus tikrinamas, nes testo rezultatas visada bus teisingas, kad ir kokia būtų b išraiškos vertė.
Atlikite paprastą testą:
if (true || ((String) null).equals("foobar")) {
...
}
ne išmeta NullPointerException
!