&& (AND) und || (OR) in IF-Anweisungen

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.

Kommentare (1)

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!

Kommentare (0)

Nein, Java macht einen Kurzschluss und hört auf zu evaluieren, sobald es das Ergebnis kennt.

Kommentare (0)