Uma construção como x = x++;indica que você provavelmente está entendendo mal o que o ++operador faz:
// original code
int x = 7;
x = x++;
Vamos reescrever isso para fazer a mesma coisa, com base na remoção do ++operador:
// behaves the same as the original code
int x = 7;
int tmp = x; // value of tmp here is 7
x = x + 1; // x temporarily equals 8 (this is the evaluation of ++)
x = tmp; // oops! we overwrote y with 7
Agora, vamos reescrevê-lo para fazer (o que eu acho) que você queria:
// original code
int x = 7;
x++;
A sutileza aqui é que o ++operador modifica a variávelx , diferente de uma expressão como x + x, que seria avaliada para um valor int, mas deixaria a xprópria variável inalterada. Considere uma construção como o forloop venerável :
for(int i = 0; i < 10; i++)
{
System.out.println(i);
}
Observe o i++lá dentro? É o mesmo operador. Poderíamos reescrever esse forloop assim e ele se comportaria da mesma maneira:
for(int i = 0; i < 10; i = i + 1)
{
System.out.println(i);
}
Também recomendo não usar o ++operador em expressões maiores na maioria dos casos. Devido à sutileza de quando ela modifica a variável original antes e depois do incremento ( ++xe x++, respectivamente), é muito fácil introduzir erros sutis que são difíceis de rastrear.
int x = 7; x = ++x;é claro que ainda é um código horrível, você não precisa reatribuir.int x = 7; x++;basta.