Ein Konstrukt wie x = x++;zeigt an, dass Sie wahrscheinlich falsch verstehen, was der ++Operator tut:
// original code
int x = 7;
x = x++;
Schreiben wir dies neu, um dasselbe zu tun, basierend auf dem Entfernen des ++Operators:
// 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
Lassen Sie es uns jetzt umschreiben, um (was ich denke) zu tun, was Sie wollten:
// original code
int x = 7;
x++;
Die Subtilität hier ist, dass der ++Operator die Variable ändertx , im Gegensatz zu einem Ausdruck wie x + x, der einen int-Wert ergibt, aber die Variable xselbst unverändert lässt. Betrachten Sie ein Konstrukt wie die ehrwürdige forSchleife:
for(int i = 0; i < 10; i++)
{
System.out.println(i);
}
Beachten Sie die i++dort? Es ist der gleiche Operator. Wir könnten diese forSchleife so umschreiben und sie würde sich genauso verhalten:
for(int i = 0; i < 10; i = i + 1)
{
System.out.println(i);
}
Ich empfehle ++in den meisten Fällen auch, den Operator nicht in größeren Ausdrücken zu verwenden. Wegen der Subtilität , wenn es die ursprüngliche Variable modifiziert in prä- gegen Post-Inkrement ( ++xund x++ist), ist es sehr einfach , subtile Bugs einzuführen, die nur schwer aufzuspüren.
int x = 7; x = ++x;Natürlich ist der Code immer noch schrecklich, Sie müssen ihn nicht neu zuweisen.int x = 7; x++;reicht.