Mi pregunta puede ser muy básica, pero aún así creo que vale la pena preguntar. Tengo el siguiente código:&& (AND) y || (O) en las declaraciones IF
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é pasará si la primera afirmación es verdadera? ¿Seguirá Java controlando la segunda declaración? Porque para que la primera declaración sea verdadera, HashMap no debe contener la clave dada, por lo que si la segunda declaración está marcada, obtendré NullPointerException
.
Así, en palabras sencillas, si tenemos el siguiente código
if(a && b)
if(a || b)
comprobaría Java b
si a
es falso en el primer caso y si es cierto a
en el segundo caso?
¿Existen comparaciones bit a bit para que pueda evaluar ambas expresiones? es decir, si (str! = null | str.isEmpty())? (por supuesto, este no es un ejemplo práctico, de hecho es estúpido, pero entiendes la idea) – Kezzer
Siempre que las expresiones no tengan efectos secundarios, la semántica del cortocircuito es lógicamente equivalente a una evaluación completa. Es decir, si A es cierto, usted sabe que A || B es verdadero sin tener que evaluar B. El único momento en que hará una diferencia es si una expresión tiene efectos secundarios. En cuanto a otros operadores, puede usar '*' y '+' como lógico 'y' y' o'; '((A? 1: 0) * (B? 1: 0)) == 1',' ((A? 1: 0) + (B? 1: 0))> 0'. Incluso puede hacer 'xor':' ((A? 1: 0) + (B? 1: 0)) == 1'. – outis
@Kezzer: ¿es realmente una comparación bit a bit? Creo que es un operador 'boolean' (lógico). Es diferente del operador 'bitwise' (integer), a pesar de tener el mismo símbolo ... –