relacionales - prioridad de operadores en java
-->-- operador en Java (2)
Me preguntaba, ¿qué hace el operador -->--
en Java?
Por ejemplo, si tengo el siguiente código:
int x = 3;
int y = 3;
if (x -->-- y) {
return true;
}
Esto siempre vuelve verdadero.
¡Gracias!
En Java, -->--
no es realmente un operador.
Lo que escribiste es en realidad if ((x--) > (--y))
.
Y, como sabemos por esta respuesta , el --y es predecrement, mientras que el x-- es postdecrement, por lo tanto, esto es básicamente if (3 > 2)
, que siempre devuelve true
.
Positcrement y preicrement son operadores muy similares. El bytecode de Java da una mejor comprensión. Cada uno de ellos consiste en dos operaciones. Cargar variable e incrementarla. La única diferencia está en el orden de estas operaciones. Si la declaración de su caso se compila de esta manera:
4: iload_1 //load x
5: iinc 1, -1 //decrement x
8: iinc 2, -1 //decrement y
11: iload_2 //load y
12: if_icmple 23 //check two values on the stack, if true go to 23rd instruction
Cuando JVM llega a una instrucción if, tiene 3
y 2
en la pila. La línea 4 y 5 están compiladas desde x--
. Líneas 8 y 11 de --y
. x
se carga antes del incremento e y
después.
Por cierto, es extraño que javac no optimice esta expresión estática.