kiedy można stosować a kiedy trzeba operatory post i pre
Nie ma pojęcia "Trzeba" -> to nie jest wymóg, jeśli w programie istnieje POTRZEBA używania post/pre fixu to wtedy należy z nich korzystać, dla przykładu pętla jest takim przykładem, aby ułatwić jej działanie w starym stylu kiedy chcemy określić jakiś zakres i co się ma dziać ze zmienną np .
for (int i=0;i<5;i++) // z postfixem dla zmiennej i
Co to oznacza? Że zmienna i - będzie zwiększona wartością dopiero po upływie pierwszej pętli Natomiast jeśli zmienna jest inkrementowana jako prefix, to jej wartość jest zwiększona natychmiastowo zobacz przykład:
int i = 1, j; // ustawiamy i na 1
j = ++i; // jeśli następnie wypiszesz zmienna j wynikiem i oraz j jest 2
po wypisaniu
wynik to : i = 2 and j = 2
dlaczego? Bo zmienna i w aktualnym wykonaniu jest zwiększona o 1.
Jeśli zrobisz post inkrementacje to wyniki będą zgoła inne :
int i = 1, j;
j = i++; // najpierw przypisze zmienna i do j potem zwiększy i
wynik:
zmienne : i=2 and j = 1
// teraz zauważ ze zmienna j ma wartość 1
czyli zwiększenie wartosci zmiennej i następuje po przypisaniu jej do zmiennej J, a nie przed. Dopiero w następnym wykonaniu przypisując zmienna i do jakiejś zmiennej ma ona wartość o 1 większą.
Dlaczego?
BO LICZY SIĘ KOLEJNOŚĆ WYKONANIA OPERATORÓW W JAVIE, A KOD CZYTANY JEST PRZEZ KOMPILATOR POKOLEI OD LEWEJ DO PRAWEJ.
Stąd w zapisie ++ zmienna ( operator ++ występuje przed samą wartością zmiennej), natomiast w zapisie zmienna ++ ( operator występuje po zmiennej, więc jako pierwsza zostanie odczytana wartość ZMIENNEJ samej) natomiast w porównaniu i przypisaniu to wina tego ze znak równa się oczekuje na 1 element na stosie.
Postfix i prefix może również być zmniejszeniem zmienne np :
--zmienna;
zmienna--; // analogicznie zmniejsza wartosc po aktualnej lini