Preparando-me para o exame Oracle Certified Associate Java SE 8 Programmer 1, encontrei o seguinte parágrafo sobre a expressão ternária no Guia de Estudo oficial:
Avaliação da expressão ternária A
partir do Java 7, apenas uma das expressões à direita do operador ternário será avaliada em tempo de execução. De maneira semelhante aos operadores de curto-circuito, se uma das duas expressões da mão direita em um operador ternário executar um efeito colateral, então ela não pode ser aplicada em tempo de execução. Vamos ilustrar esse princípio com o seguinte exemplo: [...]
Diz que apenas uma das duas expressões é avaliada, demonstrando com o seguinte exemplo:
int y = 1;
int z = 1;
int a = y < 10 ? y++ : z++;
Aqui, apenas y
incrementa, mas z
não, como seria de esperar.
O que estou descobrindo é o início do parágrafo (marcado em amarelo) onde diz "As of Java 7, ...". Testei o mesmo código com Java 1.6 e não consigo encontrar diferença no comportamento. Eu esperava que o Java 1.6 avaliasse ambas as expressões apenas a partir das informações fornecidas no parágrafo. Alguém tem uma ideia do que eles queriam dizer com "As of Java 7, ..."?
Edit: Para evitar confusão: Resume-se à pergunta, uma vez que escrevem 'As of Java 7', houve algo que mudou em relação ao operador ternário, ao mudar de Java 6 para Java 7?
fonte
Respostas:
Sou um dos autores do livro de onde veio isso. Embora eu não tenha escrito essa frase específica, concordo que a intenção era "isso foi testado em Java 7". Vou fazer uma anotação para remover isso se escrevermos outra edição.
Para ser claro, o operador ternário se comportou da mesma maneira em Java 8, 7, 6, etc. E eu ficaria muito surpreso se ele mudasse no futuro.
fonte
Do Java 6 JLS :
Redação semelhante também aparece nas edições JLS desde a versão 1.0 . O comportamento não mudou no Java 7; o guia de estudo está mal redigido.
fonte