Just to sum up the entire conversation, the problem is that, when using two's complement to store values, the range for each data type goes from -n to n-1. Therefore, there is one more negative number than there is a positive number. You can account for this when you realize that 0 is considered a positive number in two's complement (the sign bit is positive).
Therefore, if you try to take the absolute value of the most negative value, the answer will be a number which is outside of the range of the data type. This causes overflow.
In this case, we take Integer.MIN_VALUE, which is this:
And we try to take the absolute value of it. That means we need to flip all the bits and add 1. So, we first flip all the bits and we get this:
Now, we add 1, and we get:
Notice, we ended up with the same value we started with.
I hope that helps clear up any remaining confusion.
Corey