Pré e Pós incremento

Galera estou começando em java e apareceu uma dúvida aqui na parte de pré e pós incremento.
Se eu executo o código :

class Main{
	public static void main(String[] args){
   			int i = 5; //6
			int x = i++; //5
			System.out.println(i);
			System.out.println(x);
		
	}
}

Os resultados são i =6 e x =5, eu entendi que o valor de x é 5 porque o pós incremento só acrescentaria 1 depois dessa linha, mas porque o valor de i se alterou ? Porque i armazenou o valor de uma operação que eu fiz abaixo ? Até então eu pensava que essas declarações eram independentes, se eu fizer por exemplo:

		int i = 5; 
		int x = i+5;
		System.out.println(i);//5
		System.out.println(x);//10

O valor de i não é alterado pra 10, é mantido em 5 … a lógica não deveria ser a mesma ?

Não.

i++ é uma operação completa, que altera o valor de i . É equivalente à:

i = i + 1;

Independente se é pré ou pós incremento, o fato de o valor de i estar sendo passado à outra variável não muda o fato de que a operação i = i + 1 será executada.

Inclusive, você pode executar esse comando isoladamente:

int i = 5;
i++; // i passa a ser 6
i++; // i passa a ser 7
int x = i + 5; // x passa a ser 12

Abraço.

1 curtida

Basicamente, se você tem isso

Você não tem nenhuma atribuição do valor i + 5 a variável i. Por essa razão é que o o valor de i permanece em 5. Agora, se você tivesse

i = i + 5;

Então o valor de i passaria a 10

Exato, entendo que o valor de i não é alterado pois não tenho nenhuma atribuição a ele, estou somente somando ele a um valor e atribuindo o resultado a outra variável (no caso x).
Mas quando eu tenho:

		int i = 5; //6
		int x = i++; //5

A única atribuição que vejo a i é 5 .
Vi que o @TerraSkilll disse que i++ é como se fosse i = i+1, então, independente de eu fazer a atribuição de i++ a i , o valor (de i)é atualizado ?

Sim.

Como eu disse, i++ é uma operação completa. O fato de ela participar de uma atribuição não importa. O ++ é sempre executado. Exemplificando:

i = 5;
x = i++;

É equivalente à:

i = 5;
x = i;
i = i + 1;

Note que a remoção da atribuição a x não altera nada, se i++ for mantido:

i = 5;
i++;

É equivalente à:

i = 5;
i = i + 1;

Abraço.

1 curtida