tipos relacionales prioridad operadores datos condicionales comparacion asignacion aritmeticos java integer int operators java-opts

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.