В Java есть два интересных логических оператора, которых нет в большинстве других компьютерных языков. Эти вторичные версии операторов И и ИЛИ известны как логические операторы короткого замыкания . Как видно из предыдущей таблицы, оператор OR приводит к истинному результату, когда A истинно, независимо от того, что такое B.
Точно так же оператор AND приводит к ложному, когда A ложно, независимо от того, что такое B. Если вы используете ||
и &&
форму, а не |
и &
форму этих операторов, Java не будет беспокоить , чтобы оценить правый операнд в одиночку. Это очень полезно, когда для правильной работы правый операнд зависит от того, является ли левый истинным или ложным.
Например, следующий фрагмент кода показывает, как можно воспользоваться преимуществом логической оценки короткого замыкания, чтобы быть уверенным, что операция деления будет допустимой, перед ее оценкой:
if ( denom != 0 && num / denom >10)
Поскольку используется форма короткого замыкания AND ( &&
), нет риска вызвать исключение времени выполнения из-за деления на ноль. Если бы эта строка кода была написана с использованием единственной &
версии AND, обе стороны должны были бы быть оценены, что вызвало бы исключение времени выполнения, когда denom
оно равно нулю.
Стандартной практикой является использование коротких форм И и ИЛИ в случаях, связанных с логической логикой, оставляя односимвольные версии исключительно для побитовых операций. Однако из этого правила есть исключения. Например, рассмотрим следующее утверждение:
if ( c==1 & e++ < 100 ) d = 100;
Здесь использование single &
гарантирует, что операция приращения будет применяться к e
тому c
, равно 1 или нет.