variable the switch operator logical java ternary-operator java-6 short-circuiting

java - the - ternary operator php



El operador ternario en Java solo evalúa una expresión desde Java 7: ¿fue diferente en Java 1.6 y anteriores? (2)

Desde Java 6 JLS :

En tiempo de ejecución, la primera expresión de operando de la expresión condicional se evalúa primero; si es necesario, se realiza la conversión de unboxing en el resultado; el valor booleano resultante se usa para elegir la segunda o la tercera expresión de operando:

  • Si el valor del primer operando es verdadero, entonces se elige la expresión del segundo operando.
  • Si el valor del primer operando es falso, se elige la expresión del tercer operando.

La expresión de operando elegida se evalúa y el valor resultante se convierte al tipo de expresión condicional según lo determinado por las reglas indicadas anteriormente. Esta conversión puede incluir conversión de boxeo (§5.1.7) o unboxing. La expresión de operando no elegida no se evalúa para esa evaluación particular de la expresión condicional.

Una redacción similar también aparece en las ediciones JLS que se remontan a 1.0 . El comportamiento no cambió en Java 7; la guía de estudio está mal redactada.

Preparándome para el examen Oracle Certified Associate Java SE 8 Programmer 1, encontré el siguiente párrafo sobre la expresión ternaria en la Guía de estudio oficial:

Evaluación de expresión ternaria
A partir de Java 7, solo una de las expresiones de la derecha del operador ternario se evaluará en tiempo de ejecución. De manera similar a los operadores de cortocircuito, si una de las dos expresiones de la derecha en un operador ternario realiza un efecto secundario, entonces no puede aplicarse en tiempo de ejecución. Vamos a ilustrar este principio con el siguiente ejemplo: [...]

Dice que solo se evalúa una de las dos expresiones, demostrando con el siguiente ejemplo:

int y = 1; int z = 1; int a = y < 10 ? y++ : z++;

Aquí, solo y aumenta, pero z no, como era de esperar.

Me encuentro con el comienzo del párrafo (marcado en amarillo) donde dice "A partir de Java 7, ...". Probé el mismo código con Java 1.6 y no puedo encontrar una diferencia en el comportamiento. Esperaba que Java 1.6 evaluara ambas expresiones solo a partir de la información dada en el párrafo. ¿Alguien tiene una idea de lo que quería decir con "A partir de Java 7, ..."?

Editar: para evitar confusiones: todo se reduce a la pregunta, ya que escriben ''A partir de Java 7'', ¿hubo algo que cambió con respecto al operador ternario al cambiar de Java 6 a Java 7?


Soy uno de los autores del libro del que vino. Si bien no escribí esa oración en particular, estoy de acuerdo en que la intención era "esto fue probado en Java 7". Tomaré una nota para eliminar eso si escribimos otra edición.

Para ser claros, el operador ternario se ha comportado de la misma manera en Java 8, 7, 6, etc. Y me sorprendería bastante si cambiara en el futuro.