Pessoal, uma boa pegadinha pra quem está estudando para a certificação, vamos ver se vcs acertam essa:
Supondo que tenhamos um método Verdade() que sempre retorne true
Primeiro teste: int y =5;
int x =2;
if (((x > 3) && (y < 2)) | Verdadeiro()) {
System.out.println("Portal Java"):
}
Segundo teste: int y =5;
int x =2;
if ((x > 3) && (y < 2) | Verdadeiro()) {
System.out.println("Portal Java"):
}
A impressão acontecerá em qual dos testes??? E pq???
No primeiro teste, o conteúdo dos parenteses será avaliado primeiro, pois tem maior precedência sobre o operador |. E com esse resultado será feito o | (ou) com o resultado de Verdadeiro().
No segundo teste, primeiro será avaliado o resultado dos parênteses, depois o resultado de (y < 2) | Verdadeiro(), e por último será avaliado o resultado do &&, que sempre será falso, pq (x > 3) é falso. A precedência nesse caso é parênteses, | e &&.
Será que alguém vai entender minha explicação?!?!?!
Acho que enrolei tudo!!!
J
jeveauxPJ
Oi
Marcelo, é quase isso mesmo… Na primeiro teste vai impirmir pq ele está fazendo o teste do parentesis com o && com o método Verdadeiro(), mas como é | e o método sempre retorna verdadeiro vai dar certo…
No segundo testa não vai imprimir pq ele não faz por parentesis e sim com os dois operadores juntos… Como o && vem primeiro, ele o faz, viu que a primeira condição é falsa e ja abandona o resto, pq em && um falso é tudo falso, mas ele sequer testa o | no final…
T+
D
dhhpPJ
Oi jeveaux!
Realmente sua explicação é o que acontece no Java, fiz um programinha para testar.
Mas não entendi uma coisa. Pelo que eu li no livro do Deitel, o operador | tem precedência sobre &&. Se isso fosse verdade, ele deveria começar o teste pelo |, não é isso?
Parece que ele não respeitou essa regra de precedência, ou então os dois operadores tem a mesma precedência?
Se alguém puder me esclarecer melhor sobre isso…
[]'s
dhhp
Ps.: quem é Marcelo???
B
BrainnPJ
A ordem de avaliação é da esquerda para direita, e a de execução da direita para esquerda!
Estou certo?