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 x
selbst unverändert lässt. Betrachten Sie ein Konstrukt wie die ehrwürdige for
Schleife:
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 for
Schleife 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 ( ++x
und 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.