Operator ++ je višeg prioriteta nego = (operator dodjele). Kada znaš ovo, sasvim je jasno da će vrijednost promeljive a na kraju ostati nepromjenjena. Evo objašnjenja
Code:
a=a++
kako je operator ++ prioritetniji od operatora dodjele, on će prvi i da se izvrši. Znači prvo se izvršava
Code:
a++
operator ++ će da uveća vrijednost promeljive za 1, ali će da vrati staru vrijednost(tako je definisan).
Operator dodjele će promeljivoj sa lijeve strane(a) da dodjeli vrijednost izraza sa desne strane(a++). Kako je vrijednost izraza sa desne strane 2 (operator ++ je vratio 2, staru vrijednost, bez obzira što ju je u medjuvremenu uvećao za 1), u promeljivu a upisujemo tu vrijednost, te je a opet = 2.
Primjer je baš vještački, ali se iz njega mogu naučiti neke stvari.
Inače, operator dodjele je operator najnižeg prioriteta. To ti na prvu loptu možda izgleda neobično (ipak je dodjela jako važna, mnogo važnija od ++) ali prioritet operatora nema veze sa tim šta je "važno" ili šta se češće koristi. Prioritet operatora je tako postavljen kako bi programi bili čitljiviji, jasniji i lakši za kompajliranje(to je već posebna priča). Ukoliko bi operator dodjele imao viši prioritet od nekog drugog operatora (npr operatora +), onda izraz
Code:
b=c+d
ne bi imao smisla, nego bi morali pisati
Code:
b=(c+d)
što je glupo.
Citat:
jablan:
(inače, još jedan dokaz da su bez potrebe prekomplikovali Javu)
Odužio sam ovo objašnjenje kako bih skrenuo pažnju @jablan da je ponašanje Jave u ovom slučaju tačno po definiciji i intuiciji(naravno, programerskoj intuiciji).
@casperns2
Da li ti je sada ovo jasnije? Da li ti je jasno zašto bi rezultat na kraju bio 4, ukoliko bi umjesto
Code:
a=a++
koristili
Code:
a=++a
?
pozdrav