Because this is the order of execution of b = b++:
- Get the value of
b into some temp (probably into a bytecode register); this is the first part of b++, since it's a post-increment
- Increment and store the incremented result in
b (the second part of b++)
- Assign the value from Step 1 to
b (the result of the =)