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 xelle-même inchangée. Considérons une construction comme la forboucle 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 forboucle 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 ( ++xet 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.