sentencia que programacion lenguaje else ejemplos java if-statement logic

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