Al prepararme para el examen de Programador 1 de Java SE 8 Certified Associate de Oracle, encontré el siguiente párrafo sobre la expresión ternaria en la Guía de estudio oficial:
Evaluación de expresiones ternarias
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 produce un efecto secundario, entonces no se puede aplicar en tiempo de ejecución. Ilustremos 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 se y
incrementa, pero z
no, como era de esperar.
Con lo que me tropiezo es 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 proporcionada en el párrafo. ¿Alguien tiene una idea de lo que quería decir con "A partir de Java 7, ..."?
Editar: Para evitar confusiones: 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?
fuente
Respuestas:
Soy uno de los autores del libro del que vino esto. Si bien no escribí esa oración en particular, estoy de acuerdo en que la intención era "esto se probó 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.
fuente
Desde Java 6 JLS :
También aparece una redacción similar en las ediciones de JLS que se remontan a la 1.0 . El comportamiento no cambió en Java 7; la guía de estudio está mal redactada.
fuente