DEV Community

Pergunte ao especialista - Operadores

Já que os operadores de curto-circuito são, em alguns casos, mais eficientes do que seus equivalentes comuns, por que Java oferece os operadores AND e OR comuns?

Em alguns casos, você pode querer que os dois operandos de uma operação AND ou OR sejam avaliados devido aos efeitos colaterais produzidos.

Image description

Na primeira instrução if, i é incrementada independentemente do sucesso da condição.
Com o operador de curto-circuito, i não é incrementada quando o primeiro operando é falso.
A lição aprendida é que ao esperar que o operando do lado direito de uma operação AND ou OR seja avaliado, deve-se usar versões dessas operações em Java que não sejam de curto-circuito.

Top comments (1)

Collapse
 
wldomiciano profile image
Wellington Domiciano

Gostei da explicação e do exemplo indicando o efeito colateral.

Eu gostaria de adicionar algumas informações:

Estes operadores são chamados de Bitwise and Logical Operators e são especialmente úteis quando a gente trabalha com bits.

Quando os 2 operandos são booleanos, ele age como vc descreveu e produz um booleano.

Mas quando os 2 operandos são de tipos integrais, eles produzem um tipo também integral que é o resultado de aplicar a operação sobre cada bit dos operandos. Por exemplo:

class Main {
  public static void main(final String... args) {
    int or = 0b0000 | 0b1111;
    int and = 0b1010 & 0b1111;
    int xor = 0b0110 ^ 0b1111;

    String strOr = Integer.toBinaryString(or);
    String strAnd = Integer.toBinaryString(and);
    String strXor = Integer.toBinaryString(xor);

    System.out.printf("%4s\n", strOr);  // 1111
    System.out.printf("%4s\n", strAnd); // 1010
    System.out.printf("%4s\n", strXor); // 1001
  }
}
Enter fullscreen mode Exit fullscreen mode