Operador relacional se refere aos relacionamentos que os valores podem ter uns com os outros.
Operador lógico se refere às maneiras como os valores verdadeiro e falso podem estar conectados.
Operadores relacionais produzem resultados verdadeiros ou falsos.
Com frequência, operadores relacionais trabalham com operadores lógicos.
O resultado dos operadores relacionais e lógicos é um valor boolean.
Em Java, todos os objetos podem ser comparados para igualdade ou diferença usando == e !=.
Os operadores de comparação <, >, <= ou >= só podem ser aplicados a tipos com relacionamento sequencial.
Operadores relacionais podem ser aplicados a tipos numéricos e ao tipo char.
Valores de tipo boolean só podem ser comparados quanto à igualdade ou diferença.
Em Java, true > false não tem significado.
Operandos dos operadores lógicos devem ser do tipo boolean gerando um resultado de tipo boolean.
Os operadores lógicos &, |, ^ e ! dão suporte às operações AND, OR, XOR e NOT.
- Como a tabela mostra, o resultado de uma operação exclusive OR é verdadeiro quando exatamente um, e apenas um, operando é verdadeiro.
A saída do programa é dada a seguir:
i < j
i <= j
i != j
!(b1 & b2) is true
b1 | b2 is true
b1 ^ b2 is true
Operadores lógicos de curto-circuito
Java fornece versões de curto-circuito dos operadores lógicos AND e OR para código mais eficiente.
Em uma operação AND, se o primeiro operando for falso, o resultado é falso independente do segundo operando.
Em uma operação OR, se o primeiro operando for verdadeiro, o resultado é verdadeiro independente do segundo operando.
Nesses casos, não é necessário avaliar o segundo operando, economizando tempo e produzindo código mais eficiente.
O operador AND de curto-circuito é && e o operador OR de curto-circuito é ||.
Seus equivalentes comuns são & e |.
A versão comum sempre avalia cada operando, enquanto a versão de curto-circuito só avalia o segundo operando quando necessário.
Exemplo de uso: determinar se d é um fator de n usando && para evitar erro de divisão por zero em uma operação de módulo.
A instrução if primeiro verifica se d é igual a zero para impedir uma divisão por zero.
Se d for zero, o operador AND de curto-circuito interrompe a execução e não realiza a operação de módulo.
No primeiro teste, d é igual a 2 e a operação de módulo é executada.
No segundo teste, d é zero, e a operação de módulo é ignorada, evitando a divisão por zero.
O operador AND comum avalia ambos os operandos, levando a um erro de tempo de execução na divisão por zero.
Os operadores de curto-circuito são formalmente chamados de conditional-or e conditional-and em Java, mas o termo “curto-circuito” é mais usado.