Duvida & e &&, | e ||

4 respostas
edipokbelo

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?

4 Respostas

L

& e | não tem curto circuito
&& e || tem curto circuito

davidtiagoconceicao

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.

F

&& - 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?

thiago.correa
fernandoeick:
&& - 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;		
	}
Criado 19 de junho de 2009
Ultima resposta 19 de jun. de 2009
Respostas 4
Participantes 5