Operátor inkrementace (++) způsobí
zvětšení hodnoty proměnné o jedničku. Lze jej zapisovat dvěma
způsoby: prefixově a
postfixově. V prefixové notaci
operátor předchází svůj operand, v postfixové jej následuje.
V obou případech dojde k inkrementaci proměnné, rozdíl je však
v návratové hodnotě operátoru. Prefixový operátor vrací hodnotu
proměnné po zvětšení, postfixový operátor hodnotu před zvětšením.
int x = 1;
int y = ++x;
Ve výrazu y = ++x se provede nejprve
operátor inkrementace, protože má vyšší prioritu než operátor
přiřazení. Dojde tedy ke zvýšení hodnoty x
o jedničku. Návratovou hodnotou tohoto operátoru je hodnota
x po zvětšení, tj. 2. Ta se použije jako
operand operátoru přiřazení. Do proměnné y
se tedy uloží hodnota 2.
int x = 1;
int y = x++;
Ve výrazu y = x++ se provede nejprve
operátor inkrementace. Jeho návratovou hodnotou je hodnota proměnné
x před zvětšením, tj. 1. Do proměnné
y se tedy uloží hodnota 1.
Operátor dekrementace (−−) způsobí
snížení hodnoty proměnné o jedničku. Používá se obdobně jako
operátor inkrementace.
int x = 1;
System.out.println( --x );
Úloha 1
Určete, co se vytiskne.
Úloha 2
Určete, co se vytiskne.
Otázky a odpovědi
Student:
Mistře, je nějaký rozdíl mezi těmito dvěma příkazy?
++x;
x++;
Java guru:
Není. V obou případech ignoruješ návratovou hodnotu operátoru,
takže dojde pouze k inkrementaci proměnné
x. V tomto případě se většinou dává
přednost postfixovému operátoru.
Student:
Mistře, lze použít současně prefixový i postfixový operátor
inkrementace? Jak by se vyhodnocoval tento výraz?
y = ++x++;
Java guru:
Tento výraz se nepřeloží, protože není syntakticky správně.
Překladač aplikuje prefixový operátor na proměnnou
x a poté se pokusí na návratovou
hodnotu tohoto operátoru aplikovat postfixový operátor.
Jenže operátor inkrementace lze aplikovat pouze na proměnnou,
takže nastane chyba.
Student:
Vím, že můžu sčítat řetězce. Také vím, že když k řetězci přičtu
číselnou hodnotu, tak se tato hodnota převede na řetězec a ten
se připojí za daný řetězec. Podívejme se na tento kód:
int x = 1;
int y = 2;
System.out.println( x + y + " == " + x + y );
Jeho výstupem je
3 == 12
Není to v rozporu s tím, co jste říkal o sčítání řetězců,
mistře?
Java guru:
Není. Operátor + asociuje zleva
doprava, takže se nejprve provede sčítání
x + y, jehož výsledkem je hodnota 3.
Tato hodnota se přičte k řetězci
„ == “ a dostaneme
„3 == “. Dále se k tomuto řetězci
připojí hodnota x převedená na
řetězec a nakonec hodnota y, rovněž
převedená na řetězec.