Замыкающие логические операции

Java предоставляет две интересные булевских операции, не встречающиеся во многих других языках программирования. Это вторые версии булевских операций AND и OR, получившие название замыкающих логических операций. Как видно из ранее приведенной таблицы, результат выполнения операции OR равен true, когда значение операнда А равно true, независимо от значения операнда В. Аналогично, результат выполнения операции AND равен false, когда значение операнда А равно false, независимо от значения операнда В. При использовании форм | | и & & этих операций вместо | и & программа Java не будет вычислять значение правого операнда, если результат выражения можно определить по значению одного левого операнда. Это свойство очень удобно в тех случаях, когда значение правого операнда зависит от значения левого. Например, следующий фрагмент кода демонстрирует преимущество применения замыкающей логической операций для выяснения допустимости операции деления деред вычислением ее результата:

if (denom != О && num / denom > 10)

Благодаря применению замыкающей формы операции AND (&&) исключается риск возникновения исключения времени выполнения в случае равенства знаменателя (denom) нулю. Если бы эта строка кода была записана с применением одинарного символа & операции AND, программа вычисляла бы обе части выражения, что приводило бы к исключению времени выполнения при равенстве значения denom нулю.

Замыкающие формы операций AND и OR принято применять в тех случаях, когда требуется использование операций булевской логики, а односимвольные версии — исключительно для побитовых операций. Однако существуют исключения из этого правила. Например, рассмотрим следующий оператор:

if(с==1 & е++ < 100) d = 100;

В данном случае одиночный символ & гарантирует применение операции инкремента к значению е независимо от равенства 1 значения с.