Dicas: E/OU

0 respostas
J

Os caracteres && são usados para o E e os caracteres || são usados para o OU.

Entretanto existem outros operadores lógicos: o &, o | e o ^.

Qual a diferença do & para o &&? Do | para o ||? E o que é ^? Esse não é o sinal de exponenciação?

Uma coisa de cada vez, mas não, o sinal ^ não serve para exponenciação. Use Math.pow(x, y) para x elevado a y.

Voltando aos operadores...
Quando usamos o sinal duplicado (&& ou ||), significa que o Java vai testar a segunda condição somente se a primeira não definir o resultado. Quando usamos o sinal simples (& ou |) significa que o Java vai, obrigatoriamente, testar as duas condições. Já o sinal ^ refere-se ao XOR (exclusive OR/ OU exclusivo).

Vamos às tabelinhas (as famosas Tabelas-Verdade que todo mundo adora):

Operador & (e &&)

condicao 1           condicao 2             resultado
false                false                  false
false                true                   false
true                 false                  false
true                 true                   true
O resultado de um operador E só é VERDADEIRO quando as duas condições forem verdadeiras. Então, se você está utilizando o & as duas condições serão verificadas, mas se usar o && e a primeira condição já for FALSA ele não vai nem olhar para a segunda condição pois o resultado será FALSO.
Operador | (e ||)

condicao 1           condicao 2             resultado
false                false                  false
false                true                   true
true                 false                  true
true                 true                   true
O resultado de um operador OU só é FALSO quando as duas condições forem falsas. Então, se você está utilizando o | as duas condições serão verificadas, mas se usar o || e a primeira condição já for VERDADEIRA ele não vai nem olhar para a segunda condição pois o resultado será VERDADEIRO.
Operador ^

condicao 1           condicao 2             resultado
false                false                  false
false                true                   true
true                 false                  true
true                 true                   false
Esse operador SEMPRE vai avaliar as duas condições (por isso não existe ^^). Veja que o resultado só é verdadeiro quando uma condição for verdadeira e a outra falsa (é o OU EXCLUSIVO, só uma condição pode ser verdadeira).

E qual a vantagem de usar & ou | ao invés de && ou ||?
Na verdade não há vantagem, a vantagem é justamente o contrário, é melhor usar o sinal duplicado pois o desempenho é melhor (não vai precisar verificar sempre as duas condições).

Então quando usar & ou |?
Quando você quiser que a segunda condição seja avaliada pq ela tem um segundo efeito esperado.
Um exemplo extraído do livro "Java - Como Programar" (Deitel & Deitel):
(aniversario == true) | (++idade >= 65)
aniversario é um booleano, se for verdadeiro a primeira condição é verdadeira (true == true) e se estivéssemos usando || a segunda condição nem seria vista. Mas o incremento na idade está justamente na segunda condição.
Para usar o || no código acima você teria que fazer depois um condicional if (aniversario) ++idade; (ou, de outra forma: if(aniversario == true) ++ idade;)

Preferencialmente, quando do uso de &&, coloque primeiro a condição que tem maior probabilidade de dar FALSE pois, como já foi dito, não vai ser necessário verificar a segunda condição se a primeira for FALSE.

Criado 23 de julho de 2005
Respostas 0
Participantes 1