&& (ÉS) és || (VAGY) az IF utasításokban

A következő kóddal rendelkezem:

if(!partialHits.get(req_nr).containsKey(z) || partialHits.get(req_nr).get(z) < tmpmap.get(z)){  
    partialHits.get(z).put(z, tmpmap.get(z));  
}

ahol a partialHits egy HashMap.
Mi fog történni, ha az első utasítás igaz? A Java akkor is ellenőrizni fogja a második utasítást? Mert ahhoz, hogy az első utasítás igaz legyen, a HashMap nem tartalmazhatja a megadott kulcsot, így ha a második utasítást ellenőrzi, NullPointerException-t fogok kapni.
Tehát egyszerűbben fogalmazva, ha a következő kódunk van

if(a && b)  
if(a || b)

a Java ellenőrizni fogja a b-t, ha az a az első esetben hamis, és ha az a a második esetben igaz?

Nem, nem fogják ellenőrizni. Ezt a viselkedést rövidzárlat-kiértékelésnek nevezik, és számos nyelvben, köztük a Javában is megtalálható.

Kommentárok (1)

Nem, ha a igaz (egy vagy tesztben), akkor a b nem kerül tesztelésre, mivel a teszt eredménye mindig igaz lesz, függetlenül a b kifejezés értékétől.

Készítsünk egy egyszerű tesztet:

if (true || ((String) null).equals("foobar")) {
    ...
}

nem dob NullPointerException-t!

Kommentárok (0)

Nem, a Java rövidre zárja és leállítja a kiértékelést, ha már tudja az eredményt.

Kommentárok (0)