Java fornece dois operadores booleanos interessantes não encontrados na maioria das outras linguagens de computador. Essas versões secundárias de AND e OR são conhecidas como operadores lógicos de curto-circuito . Como você pode ver na tabela anterior, o operador OR resulta em verdadeiro quando A é verdadeiro, não importa o que B seja.
Da mesma forma, o operador AND resulta em falso quando A é falso, não importa o que B seja. Se você usar os formulários ||
e &&
, em vez dos formulários |
e &
desses operadores, o Java não se preocupará em avaliar apenas o operando direito. Isso é muito útil quando o operando da direita depende do esquerdo ser verdadeiro ou falso para funcionar corretamente.
Por exemplo, o fragmento de código a seguir mostra como você pode aproveitar as vantagens da avaliação lógica de curto-circuito para ter certeza de que uma operação de divisão será válida antes de avaliá-la:
if ( denom != 0 && num / denom >10)
Como a forma de curto-circuito de AND ( &&
) é usada, não há risco de causar uma exceção de tempo de execução ao dividir por zero. Se esta linha de código foi escrita usando a única &
versão de AND, ambos os lados teriam que ser avaliados, causando uma exceção de tempo de execução quando denom
for zero.
É prática padrão usar as formas de curto-circuito de AND e OR em casos envolvendo lógica booleana, deixando as versões de um caractere exclusivamente para operações bit a bit. No entanto, existem excepções a esta regra. Por exemplo, considere a seguinte declaração:
if ( c==1 & e++ < 100 ) d = 100;
Aqui, usar um único &
garante que a operação de incremento será aplicada e
se c
for igual a 1 ou não.