Ich habe den folgenden Code:
if(!partialHits.get(req_nr).containsKey(z) || partialHits.get(req_nr).get(z) < tmpmap.get(z)){
partialHits.get(z).put(z, tmpmap.get(z));
}
wobei partialHits
eine HashMap ist. Was passiert, wenn die erste Anweisung wahr ist? Wird Java die zweite Anweisung trotzdem prüfen? Denn damit die erste Anweisung wahr ist, sollte die HashMap den angegebenen Schlüssel nicht enthalten, so dass ich, wenn die zweite Anweisung geprüft wird, eine NullPointerException
erhalte.
In einfachen Worten, wenn wir den folgenden Code haben
if(a && b)
if(a || b)
würde Java im ersten Fall b
prüfen, wenn a
falsch ist, und im zweiten Fall, wenn a
wahr ist?
Nein, das wird nicht geprüft. Dieses Verhalten wird als Kurzschlussauswertung bezeichnet und ist ein Merkmal vieler Sprachen, einschließlich Java.
Nein, wenn a wahr ist (in einem "oder"-Test), wird b nicht getestet, da das Ergebnis des Tests immer wahr sein wird, unabhängig vom Wert des b-Ausdrucks.
Machen Sie einen einfachen Test:
if (true || ((String) null).equals("foobar")) {
...
}
wird nicht eine NullPointerException
auslösen!