Anomalia em comparação utilizando if

6 respostas
labbati

PessoALL por que quando faço a comparação abaixo com booleano funciona e quando faço com int apresenta erro “Type mismatch: cannot convert from int to boolean”.

boolean b = true;

int x = 1;

Sucesso:

if( b=true ){}

Erro:
if( x=5 ){}

No segundo caso nao estaria atribuindo 5 para x ao invés de comparar. Este codigo foi retirado da questão 3 do Test Killer.

Agradeço

6 Respostas

T

A comparação deve ser feita com o operador de comparação “==”, não com o operador de atribuição “=”.

Infelizmente, o compilador não lhe avisa quando você usa indevidamente o operador de atribuição dentro de um “if” se o resultado for um valor booleano; ele pelo menos lhe deveria mostrar um “warning” (advertência ou, para quem é mais ligado em futebol, um “cartão amarelo”).

labbati

Thingol deve acontecer isto mesmo que voce disse, ele converte para boolean e funciona. O Warning não é exibido. Segue a questão do test killer abaixo:

Question 3

Given: 
11. public class Test { 
12. public static void main(String [] args) { 
13. int x =5; 
14. boolean b1 = true; 
15. boolean b2 = false; 
16. 
17.if((x==4) && !b2) 
18. System.out.print(?l ?); 
19. System.out.print(?2 ?); 
20. if ((b2 = true) && b1) 
21. System.out.print(?3 ?); 
22. } 
23. } 
What is the result? 
A. 2 
B. 3 
C. 1 2 
D. 2 3 
E. 1 2 3 
F. Compilation fails. 
G. Au exceptional is thrown at runtime
Answer: D

Muito absurda esta resposta.

adriano_si

é não… booleano é o único tipo que pode receber um valor na hora que for comparado… ou seja if(b2=true) é altamente válido em Java…

ViniGodoy
adriano_si:
é não... booleano é o único tipo que pode receber um valor na hora que for comparado... ou seja
if(b2=true)
é altamente válido em Java...

É que o resultado da atribuição é o valor atribuído. Na verdade, qualquer variável pode sofrer atribuição durante uma comparação, desde que a última comparação termine num resultado booleano. Ou seja...

int x = 10;
int y = 20;
int z;

if ((z = y + x) == 30) {
    doSomething();
}

Também é valido em Java...

adriano_si

yes sr… faltou completar a situação…

:wink:

Thank you…

labbati

Muito obrigado senhores. Agradeço a todos pelo exemplo e também pela parte teórica que ajudou muito no meu entendimento desta questão. Achei até que era erro de grafia na questao, mas depois vi que não.

Criado 22 de abril de 2009
Ultima resposta 23 de abr. de 2009
Respostas 6
Participantes 4