Przygotowując się do egzaminu Oracle Certified Associate Java SE 8 Programmer 1, natknąłem się na następujący akapit dotyczący wyrażenia trójskładnikowego w oficjalnym Przewodniku po studiach:
Ocena wyrażenia trójskładnikowego
Począwszy od języka Java 7, tylko jedno z prawostronnych wyrażeń operatora trójskładnikowego zostanie ocenione w czasie wykonywania. Podobnie jak w przypadku operatorów zwarciowych, jeśli jedno z dwóch prawostronnych wyrażeń w operatorze trójskładnikowym wywołuje efekt uboczny, to nie może być stosowane w czasie wykonywania. Zilustrujmy tę zasadę następującym przykładem: [...]
Mówi, że oceniane jest tylko jedno z dwóch wyrażeń, co ilustruje następujący przykład:
int y = 1;
int z = 1;
int a = y < 10 ? y++ : z++;
Tutaj tylko y
zwiększa, ale z
nie, jak można by się spodziewać.
To, na co się natknę, to początek akapitu (zaznaczony na żółto), w którym jest napisane „Od Java 7, ...”. Testowałem ten sam kod w Javie 1.6 i nie mogę znaleźć różnicy w zachowaniu. Spodziewałem się, że Java 1.6 oceni oba wyrażenia tylko na podstawie informacji podanych w akapicie. Czy ktoś ma pomysł, co chciałby powiedzieć „Od wersji Java 7…”?
Edycja: Aby uniknąć nieporozumień: sprowadza się do pytania, skoro piszą „od Java 7”, czy coś się zmieniło w odniesieniu do operatora trójskładnikowego podczas przełączania z Java 6 na Java 7?