Une construction comme x = x++;
indique que vous comprenez probablement mal ce que fait l' ++
opérateur:
// original code
int x = 7;
x = x++;
Réécrivons ceci pour faire la même chose, basé sur la suppression de l' ++
opérateur:
// 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
Maintenant, réécrivons-le pour faire (ce que je pense) que vous vouliez:
// original code
int x = 7;
x++;
La subtilité ici est que l' ++
opérateur modifie la variablex
, contrairement à une expression telle que x + x
, qui évaluerait une valeur int mais laisserait la variable x
elle-même inchangée. Considérons une construction comme la for
boucle vénérable :
for(int i = 0; i < 10; i++)
{
System.out.println(i);
}
Remarquez le i++
dedans? C'est le même opérateur. Nous pourrions réécrire cette for
boucle comme ceci et elle se comporterait de la même manière:
for(int i = 0; i < 10; i = i + 1)
{
System.out.println(i);
}
Je déconseille également d'utiliser l' ++
opérateur dans des expressions plus grandes dans la plupart des cas. En raison de la subtilité du moment où il modifie la variable d'origine avant et après l'incrémentation ( ++x
et x++
respectivement), il est très facile d'introduire des bogues subtils difficiles à localiser.
int x = 7; x = ++x;
bien sûr, le code est toujours horrible, vous n'avez pas besoin de le réaffecter.int x = 7; x++;
est assez.