Готовясь к экзамену Oracle Certified Associate Java SE 8 Programmer 1, я наткнулся на следующий абзац о троичном выражении в официальном учебном руководстве:
Оценка тернарного выражения
Начиная с Java 7, только одно из правых выражений тернарного оператора будет вычисляться во время выполнения. Подобно операторам короткого замыкания, если одно из двух правых выражений в тернарном операторе выполняет побочный эффект, то оно не может применяться во время выполнения. Проиллюстрируем этот принцип следующим примером: [...]
В нем говорится, что вычисляется только одно из двух выражений, что демонстрируется на следующем примере:
int y = 1;
int z = 1;
int a = y < 10 ? y++ : z++;
Здесь только y
увеличивается, но z
не так, как можно было бы ожидать.
Я натыкаюсь на начало абзаца (отмеченного желтым), где написано «Начиная с Java 7, ...». Я тестировал тот же код с Java 1.6 и не могу найти разницы в поведении. Я ожидал, что Java 1.6 вычислит оба выражения только на основе информации, приведенной в этом абзаце. Есть ли у кого-нибудь идеи, что они хотели сказать с помощью «Начиная с Java 7, ...»?
Изменить: Чтобы избежать путаницы: это сводится к вопросу: поскольку они пишут «Начиная с Java 7», было ли что-нибудь, что изменилось в отношении тернарного оператора при переключении с Java 6 на Java 7?
источник
Ответы:
Я один из авторов этой книги. Хотя я не писал это конкретное предложение, я согласен, что целью было «это было протестировано на Java 7». Сделаю пометку, чтобы убрать это, если мы напишем другое издание.
Чтобы было ясно, тернарный оператор ведет себя таким же образом в Java 8, 7, 6 и т. Д. И я был бы очень удивлен, если бы он изменился в будущем.
источник
Из Java 6 JLS :
Аналогичная формулировка также появляется в редакциях JLS, начиная с версии 1.0 . В Java 7 поведение не изменилось; Учебное пособие просто плохо сформулировано.
источник