I think this section from the
java language specification may help reveal what happens:
PostIncrementExpression:
PostfixExpression ++
A postfix expression followed by a ++ operator is a postfix increment expression.
The result of the postfix increment expression is not a variable, but a value.
At run time, if evaluation of the operand expression completes abruptly, then the postfix increment expression completes
abruptly for the same reason and no incrementation occurs.
The value of the postfix increment expression is the value of the variable before the new value is stored.
therefore, I believe that since i++ doesn't complete until after the assigment expression ( "i = i++; " completes, you get an abnormal termination to the increment operation.
just a guess ....