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 xinvariata la variabile stessa. Considera un costrutto come il venerabile forloop:
for(int i = 0; i < 10; i++)
{
System.out.println(i);
}
Notate il i++dentro? È lo stesso operatore. Potremmo riscrivere questo forciclo 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 ( ++xe 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.