Questão

11 respostas
J

Lembre-se da precedência!

int c = 0;

System.out.println( false && (++c == 1) || true );		
System.out.println(c);

O que será impresso na tela!

11 Respostas

M

false
0

L

true
0

D

primeiro true]
depois 0

D

eu acho q eh true e depois 1

pq nessa linha

System.out.println( false && (++c == 1) || true );

tem um OU TRUE, qq coisa OU TRUE eh TRUE.

e a var c eh incrementada na segunda linha, entao passa a ter valor 1.

M

pqp, fala sério, eu so um burro, é true mesmo, mas q me*** … eu vi aquele “false && …” … ai ja imaginei q ele nem ia avaliar mais coisa nenhuma, ja q quando o operador && ve um false a esquerda, nem perde seu tempo com o lado da direita… agora fiquei p da vida :bah:, internamente ele vai ver ( false && true ) || true… blé…

J

Aí matheus, não fica nervoso não. :grin:
Pelo menos ficou comprovado que você é honesto e não executou o código antes de responder :grin:

Valeusss

D

hehehhe
Calma bete!!!

E ai matheus ainda vai adiar a prova denovo?
ou agora vou ou racha??

M

hahaha, não vo adiar nada, dependendo de como for minha semana, eu marco pra proxima duma vez :lol:

D

Bom, ja q o JPC naum se pronunciou eu compilei aqui e o resultado foi:

true
0

mas pq zero!!! Ele incrementa o c, na hora de fazer o teste… Ou sera q pelo fato dele achar o false && ele ja nem executa o q esta no lado direito?!

D
int c = 0;

System.out.println( false && (++c == 1) || true );
System.out.println(c);

Opa darkseid

Pelo que eu entedi, false && true é false

e false || true é TRUE

Ao menos pelo meu raciocinio aprendido em lógica matematica láááá no primeiro semestre da facult me deu este resultado.

Até conferi em código e foi este o restultado
public static void main(String[] args) {
		int c = 0; 
		System.out.println(false && true); // Para este resultado false && (++c == 1)
		System.out.println(false || true);
		System.out.println( false && (++c == 1) || true );       
		System.out.println(c); 

	
	}
}

e a saida foi:

false
true
true
0

Ficou claro?

J

Opa, desculpa a demora,

Respondendo a questão:

1º Não se esqueçam que estamos trabalhando com operadores short circuit

Portando em

De acordo com a precedência o && vai ser executado 1º, e logo de cara já ocorre um short circuit, porque quando o primeiro valor é false ele não precisa avaliar o segundo para saber o resultado da expressão, logo não ocorre o incremento ++c.

Após resolver o && teriamos a seguinte expressão

FALSE || TRUE

que por sua vez é TRUE.

Espero ter esclarecido

Criado 25 de outubro de 2004
Ultima resposta 28 de out. de 2004
Respostas 11
Participantes 5