Pessoal, ontem fazendo o simulado Whizlabs me deparei uma questão que envolvia pós/pré-incremento/decremento.
Bati o olho e me parecia muito simples, pois sabendo que o operador pós-incremento/decremento altera o valor após o uso e que o operador de pré-incremento/decremento altera o valor antes de seu uso. Entretanto, errei esta questão pois nela havia o uso da mesma variável duas vezes em uma expressão e o resultado neste caso foi completamente diferente do que eu esperava, e ainda não consegui entender.
Fiz alguns testes, e gostaria que se alguém souber o motivo e a lógica aplicada nestas situações me explique por favor.
Segue o código de exemplo:
public class PosPreIncremento {
public static void main(String [] args){
int a;
int b;
//comportamento anormal/não trivial
a = 0; b = 0;
b = a++ + ++a;
System.out.println("Val i: " + b); //imprime b = 2 (a = 2) //não deveria ser (b = 1)?
a = 0; b = 0;
b = a++ + a++;
System.out.println("Val ii: " + b); //imprime b = 1 (a = 2) //não deveria ser (b = 0)?
a = 0; b = 0;
b = ++a + a++;
System.out.println("Val iii: " + b); //imprime b = 2 (a = 2) //não deveria ser (b = 1)?
a = 0; b = 0;
b = ++a + ++a;
System.out.println("Val iv: " + b); //imprime b = 3 (a = 2) //ok, (b = 3)
//comportamento normal/trivial
a= 0; b = 0;
b= ++a + b;
System.out.println("Val v: " + b); //imprime b = 1 (a = 1)
a = 0; b = 0;
b = a++ + b;
System.out.println("Val vi: " + b); //imprime b = 0 (a = 1)
a = 0; b = 0;
b = b + ++a;
System.out.println("Val vii: " + b); //imprime b = 1 (a = 1)
a = 0; b = 0;
b = b + a++;
System.out.println("Val viii: " + b); //imprime b = 0 (a = 1)
}
}