Ho il seguente codice:
if(!partialHits.get(req_nr).containsKey(z) || partialHits.get(req_nr).get(z) < tmpmap.get(z)){
partialHits.get(z).put(z, tmpmap.get(z));
}
dove partialHits
è una HashMap.
Cosa succederà se la prima affermazione è vera? Java controllerà ancora la seconda affermazione? Perché affinché la prima affermazione sia vera, la HashMap non deve contenere la chiave data, quindi se la seconda affermazione viene controllata, otterrò NullPointerException
.
Quindi, in parole semplici, se abbiamo il seguente codice
if(a && b)
if(a || b)
Java controllerebbe b
se a
è falso nel primo caso e se a
è vero nel secondo caso?
No, non sarà controllato. Questo comportamento è chiamato valutazione del cortocircuito ed è una caratteristica di molti linguaggi tra cui Java.
No, se a è vero (in un test or
), b non sarà testato, poiché il risultato del test sarà sempre vero, qualunque sia il valore dell'espressione b.
Fate un semplice test:
if (true || ((String) null).equals("foobar")) {
...
}
non** lancerà una NullPointerException
!