Taka konstrukcja x = x++;
wskazuje, że prawdopodobnie nie rozumiesz, co ++
robi operator:
// original code
int x = 7;
x = x++;
Przepiszmy to, aby zrobić to samo, w oparciu o usunięcie ++
operatora:
// behaves the same as the original code
int x = 7;
int tmp = x; // value of tmp here is 7
x = x + 1; // x temporarily equals 8 (this is the evaluation of ++)
x = tmp; // oops! we overwrote y with 7
Teraz przepiszmy to, aby zrobić (co myślę), co chciałeś:
// original code
int x = 7;
x++;
Subtelność polega na tym, że ++
operator modyfikuje zmiennąx
, w przeciwieństwie do wyrażenia takiego jak x + x
, który oceniałby na wartość int, ale pozostawiał x
samą zmienną bez zmian. Rozważmy konstrukcję taką jak czcigodna for
pętla:
for(int i = 0; i < 10; i++)
{
System.out.println(i);
}
Zwróć uwagę i++
na tam? To ten sam operator. Moglibyśmy przepisać tę for
pętlę w ten sposób i zachowałby się tak samo:
for(int i = 0; i < 10; i = i + 1)
{
System.out.println(i);
}
Odradzam również używanie ++
operatora w większych wyrażeniach w większości przypadków. Z powodu subtelności, kiedy modyfikuje oryginalną zmienną w przyrostach przed i po ( ++x
i x++
odpowiednio), bardzo łatwo jest wprowadzić subtelne błędy, które są trudne do wyśledzenia.
int x = 7; x = ++x;
oczywiście nadal jest to okropny kod, nie musisz zmieniać przypisania.int x = 7; x++;
wystarczy.