Was sind Inkrement- und Dekrement-Operatoren und worin besteht der Unterschied zwischen den voran- und den nachgestellten Varianten?
Die beiden Operatoren existieren in je zwei Varianten, als
Präfix ( ++var
) und als Postfix ( var++
). Beide inkrementieren oder dekrementieren den in der
Variablen gespeicherten Wert.
i++ // entspricht i = i + 1 i-- // entspricht i = i - 1 ++i // entspricht i = i + 1 --i // entspricht i = i - 1
Die Operatoren müssen auf eine Variable und dürfen nicht auf ein numerisches Literal angewendet werden. Entsprechende Multiplikations- oder Divisionsvarianten gibt es natürlich ebenfalls nicht.
5++ // Fehler! i** // Fehler da unsinnig! i// // Fehler da unsinnig!
Der Unterschied zwischen Prä- und Postfix besteht in der Ausführungsreihenfolge. Beim Präfix wird es vor der Weiterverwendung, beim Postfix nach der Weiterverwendung der Variablen ausgeführt.
Die folgenden Multiplikations-Beispiele erläutern das Verhalten. Ihre Auswertung erfolgt von links nach rechts. In den Kommentierungen sind die jeweiligen Ergebnisse dargestellt.
Inkrement als Postfix
int i = 5, k = 5; System.out.println(--i * k++); // 20 System.out.println(i + ", " + k); // 4, 6
Ausführungsreihenfolge:
- verringere i um 1 dauerhaft (5 → 4)
- multipliziere i mit k (4 * 5)
- erhöhe k um 1 dauerhaft (5 → 6)
Inkrement als Präfix
int i = 5, k = 5; System.out.println(--i * ++k); // 24 System.out.println(i + ", " + k); // 4, 6
Ausführungsreihenfolge:
- verringere i um 1 dauerhaft (5 → 4)
- erhöhe k um 1 dauerhaft (5 → 6)
- multipliziere i mit k (4 * 6)
Vorzeichen...
Die Inrement- und Dekrement-Operatoren dürfen nicht mit Vorzeichen-Operatoren verwechselt werden. Im Gegensatz zu jenen, führen diese keine Zuweisung durch, sodass sich der negative oder positive Wert nur auf die unmittelbar folgende Operation bezieht.
...mit Inkrement als Präfix
int i = 5, k = 5; System.out.println(i-- * -++k); // -30 System.out.println(i + ", " + k); // 4, 6
Ausführungsreihenfolge:
- erhöhe k um 1 dauerhaft (5 → 6)
- wechsele das Vorzeichen von k für diese Operation (6 → -6)
- multipliziere i mit k (5 * -6)
- verringere i um 1 dauerhaft (5 → 4)
...mit Inkrement als Postfix
int i = 5, k = 5; System.out.println(i * -k++); // -25 System.out.println(i + ", " + k); // 5, 6
Ausführungsreihenfolge:
- wechsele das Vorzeichen von k für diese Operation (5 → -5)
- multipliziere i mit k (5 * -5)
- erhöhe k um 1 dauerhaft (5 → 6)
Man beachte, dass das negative Vorzeichen bei der Ausgabe der Variablen nicht übernommen wird.
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.