&& (AND/E)
São utilizado para realizar combinações de expressões booleanas, por exemplo:
boolean condicao = true; int valor = 1; if(condicao && (valor > 0)) { // executa alguma coisa }
No exemplo acima para que execute alguma coisa é necessário que a variável “condicao” seja true e a variável “valor” seja maior que zero.
Quando utilizado o operador && ele vai avaliar da esquerda para direita as operações e somente será verdadeiro se todas as operações forem verdadeiras.
Caso o operador encontrar alguma operação falsa ele não continuará avaliando as outras operações.
Assim podemos executar tranquilamente o código abaixo:
Cidade cidade = null; if(cidade != null && cidade.getNome().equals("Cianorte")) { System.out.println("Cianorte"); } else { System.out.println("Não há cidade"); }
Será apresentado “Não há cidade” porque as condições são falsas e não houve problema cidade.getNome() porque ele não foi executado.
|| (OR/OU)
São utilizado quando alguma, não necessariamente todas, condições já satisfaça a condição, por exemplo:
boolean condicao = true; int valor = 1; if(condicao || (valor > 0)) { // executa alguma coisa }
No exemplo acima para que execute alguma coisa é necessário que a variável “condicao” seja true ou a variável “valor” seja maior que zero.
Assim como o operador “and” o “or” também avalia da esquerda para direita as operações, no entanto assim que ele encontrar uma expressão verdadeira ele é considerado verdadeiro.
Quando utilizado o operador || as condições serão verificadas até que encontre uma condição verdadeira.
& (AND/E)
O Operador “&” é similar ao “&&” no entanto ele é um operador bit a bit, diferente do operador lógico, isso implica que ele fará a avaliação de todas as expressões mesmo que encontrei expressões falsas no caminho.
Segue abaixo um exemplo na prática da diferença dos operadoes:
Cidade cidade = null; if(cidade != null && cidade.getNome().equals("Cianorte")) { System.out.println("Cianorte"); } else { System.out.println("Não há cidade"); }// imprime Não há cidade if(cidade != null & cidade.getNome().equals("Cianorte")) { System.out.println("Cianorte"); } else { System.out.println("Não há cidade"); }// lança uma NullPointerException
Isso ocorre porque o and lógico(&&) para a avaliação quando encontra uma expressão que resulta em falsa, já o and bit a bit(&) faz a avaliação completada das expressões independente do resultado.
| (OR/OU)
O operador “|” segue a mesma linha do “&”, como um operador bit a bit, no entanto é aplicado para instruções de or/ou.