Jeg har følgende kode:
if(!partialHits.get(req_nr).containsKey(z) || partialHits.get(req_nr).get(z) < tmpmap.get(z)){
partialHits.get(z).put(z, tmpmap.get(z));
}
hvor partialHits
er en HashMap.
Hva vil skje hvis den første setningen er sann? Vil Java fortsatt sjekke den andre setningen? Fordi for at den første setningen skal være sann, bør HashMap ikke inneholde den gitte nøkkelen, så hvis den andre setningen er sjekket, vil jeg få NullPointerException
.
Så med enkle ord, hvis vi har følgende kode
if(a && b)
if(a || b)
ville Java sjekke b
hvis a
er falsk i det første tilfellet og hvis a
er sant i det andre tilfellet?
Nei, det vil ikke bli kontrollert. Denne oppførselen kalles kortslutningsevaluering og er en funksjon i mange språk, inkludert Java.
Nei, hvis a er sann (i en eller
-test), vil ikke b bli testet, ettersom resultatet av testen alltid vil være sant, uansett hvilken verdi b-uttrykket har.
Lag en enkel test:
if (true || ((String) null).equals("foobar")) {
...
}
vil ikke kaste en NullPointerException
!