Надеюсь, что это объяснение может помочь:
j = i++; // Here since i is post incremented, so first i being 0 is assigned to j
// and after that assignment , i is incremented by 1 so i = 1 and j = 0.
i = i++ + f1(i); // here again since i is post incremented, it means, the initial value
// of i i.e. 1 as in step shown above is used first to solve the
// expression i = i(which is 1) + f1(1)**Since i is 1**
// after this step the value of i is incremented. so i now becomes 2
// which gets displayed in your last System.out.println(i) statement.
Попробуйте это
i = ++i + f1(i); // here i will be first inremented and then that value will be used
// to solve the expression i = i + f1(i)'
Таким образом, вкратце, во время постинкремента выражение сначала решается, а затем значение увеличивается. Но в предварительном приращении значение сначала увеличивается, а затем выражение решается.
Но если ты пишешь только
i++;
++i;
Тогда оба означают одно и то же.
Привет