Версия java, которую я использую, оптимизирует a в выражении a && b
, но не с b.
т.е. Если a ложно, b не оценивается, но если b было ложно, оно этого не делало.
Я узнал об этом, когда выполнял проверку в форме веб-сайта: я создал сообщения для отображения на веб-странице с помощью ряда логических методов.
Я ожидал, что поля на странице, которые были введены неправильно, станут выделенными, но из-за быстрого взлома Java код выполнялся только до тех пор, пока не было обнаружено первое неправильное поле. После этого Java, должно быть, подумала что-то вроде «ложь && что-либо всегда ложно» и пропустила остальные методы проверки.
Полагаю, в качестве прямого ответа на ваш вопрос, если вы сделаете такие оптимизации, ваша программа может работать медленнее, чем могла бы. Однако чья-то программа полностью сломается, потому что они приняли неоптимизированное поведение, такое как побочный эффект, упомянутый в других ответах.
К сожалению, сложно автоматизировать интеллектуальные решения, особенно с императивными языками (C, C ++, Java, Python, ... то есть обычные языки).