Preparandomi per l'esame Oracle Certified Associate Java SE 8 Programmer 1, mi sono imbattuto nel seguente paragrafo sull'espressione ternaria nella Guida allo studio ufficiale:
Valutazione delle espressioni ternarie
A partire da Java 7, solo una delle espressioni a destra dell'operatore ternario verrà valutata in fase di runtime. In un modo simile agli operatori di cortocircuito, se una delle due espressioni di destra in un operatore ternario esegue un effetto collaterale, potrebbe non essere applicato in fase di esecuzione. Illustriamo questo principio con il seguente esempio: [...]
Dice che viene valutata solo una delle due espressioni, dimostrando con il seguente esempio:
int y = 1;
int z = 1;
int a = y < 10 ? y++ : z++;
Qui, y
aumenta solo , ma z
non come ci si aspetterebbe.
Quello in cui mi imbatto è l'inizio del paragrafo (contrassegnato in giallo) dove si dice "A partire da Java 7, ...". Ho testato lo stesso codice con Java 1.6 e non riesco a trovare differenze nel comportamento. Mi aspettavo che Java 1.6 valutasse entrambe le espressioni solo dalle informazioni fornite nel paragrafo. Qualcuno ha idea di cosa volessero dire con "A partire da Java 7, ..."?
Modifica: per evitare confusione: si riduce alla domanda, dal momento che scrivono "A partire da Java 7", è stato cambiato qualcosa riguardo all'operatore ternario, quando si passa da Java 6 a Java 7?