Bom eu estava lendo a apostila Caelum, e lá fala sobre & e && , também | e ||.
Eu sempre aprendi usando 2 simbolos, eu li e reli a explicação na apostila, mas não entendi muito bem.
Alguém poderia me explicar e dar um exemplo?
Duvida & e &&, | e ||
4 Respostas
& e | não tem curto circuito
&& e || tem curto circuito
Complementando o que o nosso amigo falou:
Uma expressão avaliada em curto circuito irá retornar o valor o mais rápido possível. Ou seja, uma expressão || retornará true no momento em que um operando true for encontrado, ignorando os demais. Já uma expressão && retornará false assim que um operando for avaliado como false.
Uma expressão avaliada sem curto circuito será avaliada por completo, independente dos valores intermediários. Ou seja, uma expressão | avaliará todos os operandos, independente de já ter avaliado um operando como verdadeiro. Da mesma forma para o operador &.
Lembrando que as expressões são avaliadas num mesmo nível da esquerda para a direita.
&& - Avalia se todas as expressões são verdadeiras. No momento em que uma das expressões for false, a avaliação é imediatamente encerrada e o restante das expressões não serão mais avaliadas.
& - Avalia se todas as expressões são verdadeiras. Se uma das expressões não for verdadeira, o resultado, sabidamente, já será false, mas mesmo assim, o restante das expressões serão avaliadas.
O | e o || segue a mesma lógica.
|| - Avalia se uma das expressões é verdadeira. Se a primeira expressão for verdadeira, a segunda expressão nem precisa ser avaliada, pois o resultado já será true. Então o compilador nem irá avaliar o restante das expressões.
| - Avalia se uma das expressões é verdadeira. Se a primeira expressão for verdadeira, então o resultado, sabidamente, já será true, mas mesmo assim, o restante das expressões serão avaliadas.
Esclareceu?
&& - Avalia se todas as expressões são verdadeiras. No momento em que uma das expressões for false, a avaliação é imediatamente encerrada e o restante das expressões não serão mais avaliadas.& - Avalia se todas as expressões são verdadeiras. Se uma das expressões não for verdadeira, o resultado, sabidamente, já será false, mas mesmo assim, o restante das expressões serão avaliadas.
O | e o || segue a mesma lógica.
|| - Avalia se uma das expressões é verdadeira. Se a primeira expressão for verdadeira, a segunda expressão nem precisa ser avaliada, pois o resultado já será true. Então o compilador nem irá avaliar o restante das expressões.
| - Avalia se uma das expressões é verdadeira. Se a primeira expressão for verdadeira, então o resultado, sabidamente, já será true, mas mesmo assim, o restante das expressões serão avaliadas.
Esclareceu?
Exemplificando o que o colega falou
public static void main(String[] args) {
System.out.println("Caso 1");
System.out.println(returnTrue() || returnFalse());
System.out.println("Caso 2");
System.out.println(returnTrue() | returnFalse());
}
public static boolean returnTrue() {
System.out.println("returnTrue");
return true;
}
public static boolean returnFalse() {
System.out.println("returnFalse");
return false;
}