Aşağıdaki koda sahibim:
if(!partialHits.get(req_nr).containsKey(z) || partialHits.get(req_nr).get(z) < tmpmap.get(z)){
partialHits.get(z).put(z, tmpmap.get(z));
}
burada partialHits
bir HashMap'tir.
İlk ifade doğruysa ne olacak? Java yine de ikinci ifadeyi kontrol edecek mi? Çünkü ilk ifadenin doğru olması için HashMap'in verilen anahtarı içermemesi gerekir, bu nedenle ikinci ifade kontrol edilirse NullPointerException
alırım.
Yani basit bir ifadeyle, aşağıdaki koda sahipsek
if(a && b)
if(a || b)
Java, ilk durumda a
yanlışsa ve ikinci durumda a
doğruysa b
yi kontrol eder mi?
Hayır, kontrol edilmeyecek. Bu davranış kısa devre değerlendirmesi olarak adlandırılır ve Java dahil birçok dilde bulunan bir özelliktir.
Hayır, a doğruysa (bir veya
testinde), b test edilmeyecektir, çünkü b ifadesinin değeri ne olursa olsun testin sonucu her zaman doğru olacaktır.
Basit bir test yapın:
if (true || ((String) null).equals("foobar")) {
...
}
bir NullPointerException
fırlatmayacaktır!