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ł xsamą zmienną bez zmian. Rozważmy konstrukcję taką jak czcigodna forpę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ę forpę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 ( ++xi 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.