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 x
própria variável inalterada. Considere uma construção como o for
loop 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 for
loop 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 ( ++x
e 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.