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?
źródło
Odpowiedzi:
Jestem jednym z autorów książki, z której pochodzi. Chociaż nie napisałem tego konkretnego zdania, zgadzam się, że intencją było „to zostało przetestowane na Javie 7”. Zanotuję to, aby to usunąć, jeśli napiszemy kolejne wydanie.
Żeby było jasne, operator trójskładnikowy zachował się w ten sam sposób w Javie 8, 7, 6 itd. Byłbym bardzo zaskoczony, gdyby zmienił się w przyszłości.
źródło
Z JLS Java 6 :
Podobne sformułowanie pojawia się również w wydaniach JLS sięgających 1.0 . Zachowanie nie zmieniło się w Javie 7; podręcznik do nauki jest po prostu źle sformułowany.
źródło