# Post increment operator not incrementing in for loop [duplicate]

for (int i = 0; i < 10; i = i++) {


The above loop is essentially the same as: –

for (int i = 0; i < 10; i = i) {


the 3rd part of your for statement – i = i++, is evaluated as: –

int oldValue = i;
i = i + 1;
i = oldValue;  // 3rd Step


You need to remove the assignment from there, to make it work: –

for (int i = 0; i < 10; i++) {


## Behaviour of x = 1; x = x++ + x++; : –

As far as your issue as specified in the comment is concerned, the result of the following expression: –

x = 1;
x = x++ + x++;


is obtained as follows: –

Let’s mark different parts of the second statement: –

x = x++ + x++;
R    A     B


Now, first the RHS part (A + B) will be evaluated, and then the final result will be assignmed to x. So, let’s move ahead.

First A is evaluated: –

old1 = x;  // old1 becomes 1
x = x + 1; // Increment x. x becomes 2
//x = old1; // This will not be done. As the value has not been assigned back yet.


Now, since the assignment of A to R is not done here, the 3rd step is not performed.

Now, move to B evaluation: –

old2 = x;  // old2 becomes 2. (Since x is 2, from the evaluation of A)
x = x + 1; // increment x. x becomes 3.
// x = old2; // This will again not be done here.


Now, to get the value of x++ + x++, we need to do the last assignment that we left in the evaluation of A and B, because now is the value being assigned in x. For that, we need to replace: –

A --> old1
B --> old2   // The last assignment of both the evaluation. (A and B)

/** See Break up x = old1; towards the end, to understand how it's equivalent to A = old1; in case of x = x++, considering x++ <==> A in this case. **/


So, x = x++ + x++, becomes: –

x = old1 + old2;
= 1 + 2;
= 3;  // Hence the answer


## Break up of 3rd part of x = x++, to see how it works in x = x++ + x++ case: –

Wonder why the replacement is done as A --> old1 and not x --> old1, as in case of x = x++.

Take a deep look at x = x++ part, specially the last assignment: –

x = oldValue;


if you consider x++ to be A here, then the above assignment can be broken into these steps: –

A = oldValue;
x = A;


Now, for the current problem, it is same as: –

A = old1;
B = old2;
x = A + B;
`

I hope that makes it clear.