En me préparant à l'examen Oracle Certified Associate Java SE 8 Programmer 1, je suis tombé sur le paragraphe suivant sur l'expression ternaire dans le guide d'étude officiel:
Évaluation des expressions ternaires
À partir de Java 7, une seule des expressions de droite de l'opérateur ternaire sera évaluée lors de l'exécution. D'une manière similaire aux opérateurs de court-circuit, si l'une des deux expressions de droite dans un opérateur ternaire produit un effet secondaire, alors il peut ne pas être appliqué au moment de l'exécution. Illustrons ce principe avec l'exemple suivant: [...]
Il dit qu'une seule des deux expressions est évaluée, ce qui montre l'exemple suivant:
int y = 1;
int z = 1;
int a = y < 10 ? y++ : z++;
Ici, seulement y
incrémente, mais z
pas, comme vous vous en doutez.
Ce que je suis en train de trébucher, c'est le début du paragraphe (marqué en jaune) où il est dit "À partir de Java 7, ...". J'ai testé le même code avec Java 1.6 et je ne trouve pas de différence dans le comportement. Je m'attendais à ce que Java 1.6 évalue les deux expressions uniquement à partir des informations données dans le paragraphe. Quelqu'un a-t-il une idée de ce qu'il voulait dire avec "A partir de Java 7, ..."?
Edit: Pour éviter toute confusion: Cela se résume à la question, puisqu'ils écrivent «À partir de Java 7», y a-t-il eu quelque chose qui a changé concernant l'opérateur ternaire, lors du passage de Java 6 à Java 7?
la source
Réponses:
Je suis l'un des auteurs du livre dont cela vient. Bien que je n'ai pas écrit cette phrase particulière, je suis d'accord que l'intention était "ceci a été testé sur Java 7". Je ferai une note pour supprimer cela si nous écrivons une autre édition.
Pour être clair, l'opérateur ternaire s'est comporté de la même manière dans Java 8, 7, 6, etc. Et je serais assez surpris si cela changeait à l'avenir.
la source
À partir du JLS Java 6 :
Une formulation similaire apparaît également dans les éditions JLS remontant à 1.0 . Le comportement n'a pas changé dans Java 7; le guide d'étude est simplement mal rédigé.
la source