A questão foca nos operadores de incremento e decremento. Eles podem ser:
Pré-fixados: é avaliado o valor incrementado (decrementado) de uma variável, ou seja, o valor trabalhado já é o incrementado (decrementado) ; e
Pós-fixados: é avaliado o valor original, ou seja, o valor trabalhado é o valor original de uma variável e depois o valor da variável é incrementado (decrementado) .
Exemplo com o operador de incremento/decremento pré-fixado:
int x = 15;
System.out.println(“x: ” + ++x); // O resultado gerado é x: 16.
Exemplo com o operador de incremento/decremento pós-fixado:
int x = 15;
System.out.println(“x: ” + x++); // O resultado gerado é x: 15.
System.out.println(“x: ” + x); // O resultado gerado é x: 16.
Agora iremos ao código da questão.
A variável c inicia com 1:
int c = 1;
A variável c é atualizado com 0:
c = 0;
Será impresso o valor original da variável c (decremento pós-fixado) e depois será decrementado (a variável c é atualizado para -1):
System.out.print(c--); // Será impresso 0.
Será impresso o valor já incrementado da variável c (decremento pré-fixado) (a variável c é atualizado para 0):
System.out.print(++c); // Será impresso 0.
Será impresso o valor atual da variável c:
System.out.print(c); // Será impresso 0.
Seguindo no código, temos a utilização de um operador de atribuição composta:
c -= --c - c++;
Organizando o trecho acima, temos:
c = c - ((--c) - (c++));
Tudo o que está à direita do operador de atribuição será repassado para a variável c. Então vamos comentar esse lado do operador:
- Primeiro operando (c): c é igual a 0 (valor da variável até o momento);
- Segundo operando (--c): c é igual a -1 (valor já decrementado da variável, pois se está usando operador de decremento pré-fixado);
- Terceiro operando (c++): c é igual a -1 (valor atualizado da variável no segundo operando e depois o valor é incrementado).
Organizando o trecho agora com valores, temos:
c = 0 - ((-1) - (-1));
c = 0 - (-1 + 1);
c = 0 - 0;
c = 0;
Será impresso o valor original da variável c (decremento pós-fixado) e depois será decrementado (a variável c é atualizado para -1):
System.out.print(c--); // Será impresso 0.
Será impresso o valor já incrementado da variável c (decremento pré-fixado) (a variável c é atualizado para 0):
System.out.print(++c); // Será impresso 0.
Será impresso o valor atual da variável c:
System.out.println(c); // Será impresso 0.
Ao final, será impresso 000000.
Gabarito: letra D.
Referência:
JSE02 - Java Standard Edition (Prof. Rogério Araújo) - Mód. 02. Disponível em: http://www.provasdeti.com.br/jse02ra-para-concursos.html.