Obsah

Operátory inkrementace a dekrementace

prefixový operátor postfixový operátor 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.