Un costrutto come x = x++;
indica che probabilmente stai fraintendendo ciò che l' ++
operatore fa:
// original code
int x = 7;
x = x++;
Riscriviamo questo per fare la stessa cosa, in base alla rimozione ++
dell'operatore:
// 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
Ora, riscriviamolo per fare (quello che penso) che volevi:
// original code
int x = 7;
x++;
La sottigliezza qui è che l' ++
operatore modifica la variabilex
, a differenza di un'espressione come x + x
, che valuterebbe un valore int ma lascerebbe x
invariata la variabile stessa. Considera un costrutto come il venerabile for
loop:
for(int i = 0; i < 10; i++)
{
System.out.println(i);
}
Notate il i++
dentro? È lo stesso operatore. Potremmo riscrivere questo for
ciclo in questo modo e si comporterebbe lo stesso:
for(int i = 0; i < 10; i = i + 1)
{
System.out.println(i);
}
Consiglio anche di non utilizzare l' ++
operatore in espressioni più grandi nella maggior parte dei casi. A causa della sottigliezza di quando modifica la variabile originale in pre-post-incremento ( ++x
e x++
, rispettivamente), è molto facile introdurre bug sottili che sono difficili da rintracciare.
int x = 7; x = ++x;
ovviamente è ancora un codice orribile, non è necessario riassegnarlo.int x = 7; x++;
è abbastanza.