Estou estudando para a certificação de programador, e tenho algumas dúvidas sobre precedência, talvez alguém possa me ajudar.
Primeiramente, segundo uma tabela no tutorial da própria Sun, os operadores de pós-incremento têm precedência sobre os de pré-incremento. Segundo a maioria das fontes na internet esses operadores são avaliados da direita para a esquerda. No entanto, até onde eu fui capaz de testar, ambos operadores têm a mesma precedência e são avaliados da esquerda para a direita! Na prática:
public class Test {
public static void main (String[] argumentos) {
int a = 5;
a = ++a + a++ * ++a;
// 1 2 3
System.out.println(a);
}
}
O resultado é 54 (usando o J2SE 1.5 da Sun). Isso quer dizer que o 1 (++a) foi avaliado primeiro, resultando em 6 (e incrementando a variavel a para 6), em seguida o 2 (a++) foi avaliado, resultando em 6 (e incrementando a variável a para 7), em seguida o 3 foi avaliado, resultando em 8 (e incrementando a variável a para 8). Após a avaliação desses argumentos, é feita a multiplicação do resultado de 2 e 3 (6 * 8), resultando em 48, que em seguida é somado com 1 (6 + 48), resultando em 54.
Se o operador de pós-incremento (2) fosse avaliado primeiro, ele retornaria 5, e os outros dois (1 e 3) retornariam 7 e 8 (isso se forem avaliados da esquerda para a direita), o que resultaria em 47. Se a ordem de avaliação fosse da direita para a esquerda o resultado seria 43.
Meu raciocínio está correto? O tutorial da Sun está errado?