Ik heb de volgende 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));
}
waarbij partialHits
een HashMap is.
Wat zal er gebeuren als het eerste statement waar is? Zal Java dan nog steeds het tweede statement controleren? Want om het eerste statement waar te laten zijn, mag de HashMap de gegeven sleutel niet bevatten, dus als het tweede statement gecontroleerd wordt, zal ik NullPointerException
krijgen.
Dus in simpele woorden, als we de volgende code hebben
if(a && b)
if(a || b)
zou Java dan b
controleren als a
false is in het eerste geval en als a
true is in het tweede geval?
Nee, het wordt niet gecontroleerd. Dit gedrag wordt kortsluiting-evaluatie genoemd en is een kenmerk van veel talen, waaronder Java.
Nee, als a waar is (in een of
test), zal b niet getest worden, omdat het resultaat van de test altijd waar zal zijn, wat ook de waarde van de b expressie is.
Maak een eenvoudige test:
if (true || ((String) null).equals("foobar")) {
...
}
zal niet een NullPointerException
gooien!