java - que - ¿Por qué esto si la declaración, con una asignación y verificación de igualdad, se evalúa como falsa?
sentencia if ejemplos (4)
Este es un problema de precedencia, básicamente. Está asumiendo que su código es equivalente a:
if ((test1 = false) || (test1 == false))
... pero no lo es. En realidad es equivalente a:
if (test1 = (false || test1 == false))
... que es equivalente a:
if (test1 = (false || false))
(porque
test1
es
true
para empezar)
... que es equivalente a:
if (test1 = false)
que asigna el valor
false
a
test1
, con el resultado de que la expresión es
false
.
Consulte el tutorial de Java sobre operadores para obtener una tabla útil de precedencia de operadores.
¿Cómo funciona una
instrucción
Java
if
cuando tiene una asignación y una comprobación de igualdad
OR
-d juntos?
public static void test() {
boolean test1 = true;
if (test1 = false || test1 == false) {
System.out.println("TRUE");
} else {
System.out.println("FALSE");
}
}
¿Por qué esta impresión es FALSA?
La expresión no se analiza de la forma en que piensas. No es
(test1=false) || (test1 == false)
en cuyo caso el resultado hubiera sido
true
, pero
test1 = (false || test1 == false)
El valor de
false || test1 == false
false || test1 == false
expresión
false || test1 == false
se calcula primero, y es
false
, porque
test1
se establece en
true
al ingresar al cálculo.
La razón por la que se analiza de esta manera es que la
precedence
de
||
es más bajo que el del operador
==
, pero más alto que la precedencia del operador de asignación
=
.
test1 = false || test1 == false
expresión1
test1 = false || test1 == false
test1 = false || test1 == false
se evaluará en el siguiente paso.
PASO: 1-
test1 = false || test1 == false
test1 = false || test1 == false
// la precedencia de
==
es más alta
PASO: 2-
test1 = false || false
test1 = false || false
// Operador
||
tener mayor precedencia
PASO: 3-
test1 = false
PASO: 4-
false
Como el valor booleano de la expresión se vuelve falso, se está ejecutando otra instrucción.
(test1 = false || test1 == false)
devuelve falso, porque ambos son falsos.
(test1 = false || test1 == true)
esto es cierto porque uno de ellos es verdadero