| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > if(false && true &&...) |
| Автор: Antropoid 22.3.2007, 12:38 | ||
Компилятор будет проверять второе условие, или, поймет, что далее идти бессмысленно? |
| Автор: batigoal 22.3.2007, 12:54 |
| Поймет. Только не компилятор, а среда выполнения. При компиляции, думаю, это не будет оптимизировано. |
| Автор: LSD 22.3.2007, 13:16 |
| Если переменные объявить как final, то компилятор сразу вычислит выражение и уберет условие совсем. |
| Автор: Antropoid 22.3.2007, 13:18 |
| ОК. Спасибо. |
| Автор: _Y_ 22.3.2007, 14:07 |
| Если не ошибаюсь, в общем случае & проверяет все условия выражения, а только потом решает что делать. && же, найдя первое значение false (идя слева направо если нет скобок), забросит это дело, справедливо решив, что далнейшие траты времени бессмысленны и результат все равно false. Это позволяет оптимальнее писать код, ставя на первое место ту операцию, которая вероятнее даст false. Подобная разница есть и в выполнении других булевых операторов. |
| Автор: nornad 22.3.2007, 16:02 |
Как раз ошибаешься. В общем случае используется ленивое вычисление и если после первого условия уже можно точно скачать, каким будет результат всего выражения, то второе условие вычисляться не будет. Насчёт final не в курсе. Добавлено @ 16:05 Упс, что-то я уже не всё понимаю при чтении. Да, насчёт поведения & и && ты всё описал верно. |
| Автор: VSergeyV 22.3.2007, 16:09 | ||||
гыгыгыг, говорят из индийского кода да поспешил /*но смысл то остался*/
|
| Автор: LSD 22.3.2007, 17:18 | ||||
Это с The Daily WTF, и код изначально на C# (на Java такое не скомпилируется). |
| Автор: _Y_ 22.3.2007, 17:35 | ||||
Заело. Нашел книжку D.Flanagan, Java in a Nutshell
Удивительно, но я оказался прав ЗЫ: Видимо я непонятно использовал слова "в общем случае". Я подразумевал случай "без final". Прошу прощения. =========== Отправил и увидел изменение в Вашем посте. |