Java пропонує два цікавих булеві оператори, які не можна знайти в більшості інших комп'ютерних мов. Ці вторинні версії AND і OR відомі як логічні оператори короткого замикання . Як видно з попередньої таблиці, оператор АБО призводить до істини, коли A є правдою, незалежно від того, що B.
Аналогічно, оператор AND призводить до помилки, коли A є хибним, незалежно від того, що це B. Якщо ви використовуєте оператори ||
та &&
форми, а не форми |
та &
форми цих операторів, Java не буде заважати оцінювати правий операнд самостійно. Це дуже корисно, коли правий операнд залежить від того, чи є правильний чи хибним лівий, щоб правильно функціонувати.
Наприклад, наступний фрагмент коду показує, як можна скористатися логічною оцінкою короткого замикання, щоб бути впевненою, що операція поділу буде дійсною перед її оцінкою:
if ( denom != 0 && num / denom >10)
Оскільки використовується форма короткого замикання AND ( &&
), немає ризику спричинити ділення виключення на час виконання від нуля. Якби цей рядок коду був написаний за допомогою єдиної &
версії AND, обидві сторони повинні бути оцінені, викликаючи виняток під час виконання, коли denom
дорівнює нулю.
Стандартна практика використовувати форми короткого замикання І і АБО у випадках, що стосуються булевої логіки, залишаючи односимвольні версії виключно для побітових операцій. Однак з цього правила є винятки. Наприклад, розглянемо наступне твердження:
if ( c==1 & e++ < 100 ) d = 100;
Тут, використовуючи єдиний, &
гарантується, що операція приросту буде застосована до e
того, чи c
дорівнює 1 чи ні.