Dlaczego zapisy i = i++; oraz i = ++i; nie są równoważne?
Dlaczego zapisy i = i++; oraz i = ++i; nie są równoważne?
Załóżmy, że wykonamy dwa alternatywne fragmenty kodu:
int value = 0;
value = value++;
--------------------
int value = 0;
value = ++value;
Patrząc z pewnego punktu widzenia, można by przypuszczać, że zapisy te będą dawać jednakowy wynik, ponieważ w obu przypadkach inkrementujemy zmienną "value" i moment przypisania nie powinien mieć znaczenia. Jednak w momencie wykonywania powyższych operacji najpierw tworzona jest kopia zmiennej "value" na stosie. Inkrementacja jest wykonywana na kopii, a nie na oryginale. Potem w pierwszym przypadku następuje przypisanie i inkrementacja, a w drugim najpierw jest inkrementacja, a dopiero później przypisanie.
W efekcie, w pierwszym przypadku otrzymamy wartość 0, a w drugim 1.