Важно не только знание, но и воображение, без которого знание - пустой лист. (с)
В процессе самообучения лично у меня, есть одна смешная особенность, а именно, я почему-то люблю задавать много очевидных, иногда не очень, но глупых вопросов на тему "а, что будет если?".
Ну и как я уже писал раньше в посте о планировании самообучения, эти вопросы будут излагаться и разбираться на примерах =)
Ну например, есть код, в котором объявлена и инициализирована переменная s типа int.
public class Main {
public static void main(String[] args) {
int s = 0;
for (int i = 0; i < 10; i++) {
s = s + s++;
}
System.out.println(s);
}
}
Так вот, когда у молодого (ну или в моем случае не очень =) ) программиста изучающего новый, незнакомый язык программирования (хотя по большей части логика у всех одинаковая, но суть не в этом), за неимением опыта работы с ним, глядя на этот код возникнет впечатление, что переменная s которая на входе имеет значение равное нулю, после окончания работы цикла будет иметь значение равное 1023 или около того. Увы, в данном примере оно всегда будет равно 0!
Все предельно просто, переменная объявлена перед началом цикла со значением 0, при каждом входе в цикл значение буде равно нулю, а значение, которое она получает в результате инкрементирования в постфиксной форме будет теряться по окончанию каждого прохода цикла!
s = 0
for (0; 0 < 10; 0++) {
0 = 0 + 0++;
/* здесь в результате математической операции значение будет равно нулю, но после нее переменная s становится равной единице */
}
// Вторая итерация
for (1; 1 < 10; 1++) {
0 = 0 + 0++;
/* в предыдущей итерации цикла все закончилось тем, чЧто переменная получила значение равное 1, но так как первая итераяция цикла окончена, вместе с ней закончилась и область действия, а следовательно, на входе переменная s получила опять значение равное 0 */
}
А вот если бы запись была в префиксной форме, то значение не терялось бы! То есть при каждом входе в цикл оно было бы равное математической операции из предыдущей итерации цикла.
0 = 0 + ++0 = 0 + 1 = 1
1 = 1 + ++1 = 1 + 2 = 3
3 = 3 + ++3 = 3 + 4 = 7
И так далее до момента пока цикл не пройдет все 10 итераций =).
По мимом операции инкремента, здесь еще сыграла роль области действия переменных.
Так что будьте внимательны ;)