Tengo el siguiente código:
if(!partialHits.get(req_nr).containsKey(z) || partialHits.get(req_nr).get(z) < tmpmap.get(z)){
partialHits.get(z).put(z, tmpmap.get(z));
}
donde partialHits
es un HashMap. ¿Qué ocurrirá si la primera sentencia es verdadera?¿Java seguirá comprobando la segunda sentencia?** Porque para que la primera sentencia sea verdadera, el HashMap no debe contener la clave dada, por lo que si se comprueba la segunda sentencia, obtendré NullPointerException
.
Así que en palabras simples, si tenemos el siguiente código
if(a && b)
if(a || b)
¿verificaría Java b
si a
es falso en el primer caso y si a
es verdadero en el segundo?
No, no se comprobará. Este comportamiento se denomina evaluación de cortocircuito y es una característica de muchos lenguajes, incluido Java.
No, si a es verdadero (en una prueba or
), b no se probará, ya que el resultado de la prueba siempre será verdadero, sea cual sea el valor de la expresión b.
Haz una prueba sencilla:
if (true || ((String) null).equals("foobar")) {
...
}
¡no** lanzará una NullPointerException
!