Qual o resultado da sequinte expressão?

Bom dia galera!

Estou um pouco na dúvida, em uma coisa q parece simples, mas pode se tornar um pouco confuso…

Código:

x = 0;
y = x++ + ++x;

Qual o resultado de y?
PS: Incluido os passos necessários para se chegar no resultado.

Valeu galera!!

O resultado de y é 2.

x++ = guarda 1 para a próxima chamada de x, que no caso é ++x.

Então o ++x soma 1 com ele mesmo, que resulta no 2.

[quote=“Carneiro”]O resultado de y é 2.

x++ = guarda 1 para a próxima chamada de x, que no caso é ++x.

Então o ++x soma 1 com ele mesmo, que resulta no 2.[/quote]

Mas, diferente do pré, qdo vc faz o pós incremento, ele não pega primeiro o valor da variável para usar na expressão e depois incrementa a varável?

Segundo exemplo de expressão:
x = 3;
y = x++ + ++x;

Qual o resultado?

e ai…

No pos-incremento, ele incrementa a variavel, apos a execução da instrução ou ate encontrar outra operação com a variavel.

[quote=“marcosbrandao”]e ai…

No pos-incremento, ele incrementa a variavel, apos a execução da instrução ou ate encontrar outra operação com a variavel.[/quote]

Então o segundo exemplo de questão ficaria assim:
y = 4 + 5 = 9 ou
y = 4 + 4 = 8 ?

E nesse caso aqui abaixo:
x = 2;
a = 3;
y = x++ + ++a;
Qual o resultado?

Separe as variáveis que você entenderá melhor.

Exemplo:


  int x = 3;

  int xPos = x++;
  System.out.println(xPos);
		
  int xPre = ++x;
  System.out.println(xPre);		

  int y = xPos + xPre; 
  System.out.println(y);

Na realidade, o que ocorre é o seguinte.

Quando é executado o operador de pós-incremento, ele incrementa x e retorna o valor antigo, no caso, o x vai pra 1 e retorna 0 pra expressão, ao executar o operador de pré-incremento, o x vale 1, então ele é incrementado pra 2, e retornado o próprio 2 pra expressão, aí a soma fica assim 0 + 2:

x --> 0
x --> 1, retorna 0
x --> 2, retorna 2
0 + 2 = 2
y = 2

Se você fizer isso:

x = 0;
y = x++ * ++x;

vai ver que o resultado é 0, porque:

x --> 0
x --> 1, retorna 0
x --> 2, retorna 2
0 * 2 = 0
y = 0

[quote=“jairelton”]Na realidade, o que ocorre é o seguinte.

Quando é executado o operador de pós-incremento, ele incrementa x e retorna o valor antigo, no caso, o x vai pra 1 e retorna 0 pra expressão, ao executar o operador de pré-incremento, o x vale 1, então ele é incrementado pra 2, e retornado o próprio 2 pra expressão, aí a soma fica assim 0 + 2:

x --> 0
x --> 1, retorna 0
x --> 2, retorna 2
0 + 2 = 2
y = 2

Se você fizer isso:

x = 0;
y = x++ * ++x;

vai ver que o resultado é 0, porque:

x --> 0
x --> 1, retorna 0
x --> 2, retorna 2
0 * 2 = 0
y = 0[/quote]

Maravilha jairelton…é exatamente o q eu queria saber…

Eu vi isso a algum tempo e não lembrava exatamente como ocorria…e com certeza isso irá cair na prova de certificação…então eu precisava ter certeza…

Concordo com vc!

Valeu!