Order of operations in i=i++;
java, operators
Solution
The simple way to see it is like this:
Step 1: Your `int i = 0;` line, which (of course) does this:
i = 0
Then we come to the `i = i++;` line, where things get interesting. The right-hand side of the `=` is evaluated, and then assigned to the left-hand side. So let's look at the right-hand side of that, `i++`, which has two parts:
Step 2:
temporary_holder_for_value = i
The value of `i` is read and stored away in a temporary location (one of the virtual machine registers, I expect). Then the second part of `i++` is done:
Step 3:
i = i + 1
Now we're done with the right-hand side, and we assign the result to the left-hand side:
Step 4:
i = temporary_holder_for_value
The key is that last step. Basically, everything to the right of the `=` is done first, and the result of it is then assigned to the left. Because you used a post-increment (`i++`, not `++i`), the result of the expression on the right takes `i`'s value before the increment. And then the last thing is to assign that value to the left-hand side.
Problem
Understanding the difference between `++i` and `i++`, the below example still feels counter-intuitive. Could someone please explain the order of operations and assignments in the following example? ``` int i = 0; i = i++; System.out.println(i); // 0 ``` Namely on line two, why is `i` not incremented after the assignment?