Cómo incrementar y decrementar con una condición “si”.
Tengo este código:
class Ejemplo {
public static void main(String args[]) {
int x = 99;
if (x++ == x) {
System.out.println("x++==x : " + x);
}
if (++x == x ) {
System.out.println("++x==x : " + x);
}
if (x == x++) {
System.out.println("x==x++ : " + x);
}
if (x == ++x) {
System.out.println("x==++x : " + x);
}
if (++x == ++x) {
System.out.println("++x==++x : " + x);
}
if (x++ == x++) {
System.out.println("x++==x++ : " + x);
}
if (++x == x++) {
System.out.println("++x==x++ : " + x);
}
}
}
y este es el resultado –>
++x==x : 101
x==x++ : 102
++x==x++ : 109
Quiero entender cómo el compilador de Java maneja este código. Pude entender cómo se llegó a esta parte del resultado:
++x==x : 101
x==x++ : 102
Pero no pude entender esta parte del resultado:
++x==x++ : 109
¿Cómo funciona este código? Y lo más importante, ¿cómo funciona el último resultado?
davy.ai
Este código utiliza varios operadores de incremento previo y posterior para incrementar el valor de la variable x.
En la declaración if
++x == x++
, el operador de incremento previo++x
incrementa el valor de x a 108 y devuelve este valor para ser comparado con el operador de incremento posteriorx++
. El operador de incremento posterior luego incrementa el valor de x a 109, pero devuelve el valor original (pre-incremento) que era 108. Por lo tanto, la comparación se convierte en108 == 109
, lo cual es falso y esta condición no se ejecuta.En la última declaración if
++x == x++
, el operador de incremento previo++x
incrementa el valor de x a 110 y devuelve este valor para ser comparado con el operador de incremento posteriorx++
. El operador de incremento posterior luego incrementa el valor de x a 111, pero devuelve el valor original (pre-incremento) que era 110. Por lo tanto, la comparación se convierte en110 == 110
, lo cual es verdadero y esta condición se ejecuta, imprimiendo la salida++x==x++ : 109
.Es importante tener en cuenta que el orden de evaluación de los operadores en Java está predefinido, por lo que el comportamiento de estos operadores es consistente en diferentes compiladores y máquinas.