First, Integer.MIN_VALUE static constant gets evaluated to -2147483648 or -2^31 (minus two to the power of 31). Then, a static method of Integer class toHexString() is invoked. It takes an int argument and returns a
String hexadecimal representation of the passed integer.
API:
Returns a string representation of the integer argument as an unsigned integer in base 16.
The unsigned integer value is the argument plus 232 if the argument is negative; otherwise, it is equal to the argument. This value is converted to a string of ASCII digits in hexadecimal (base 16) with no extra leading 0s. If the unsigned magnitude is zero, it is represented by a single zero character '0' ('\u0030'); otherwise, the first character of the representation of the unsigned magnitude will not be the zero character. The following characters are used as hexadecimal digits:
0123456789abcdef
These are the characters '\u0030' through '\u0039' and '\u0061' through '\u0066'. If uppercase letters are desired, the String.toUpperCase() method may be called on the result:
Integer.toHexString(n).toUpperCase()
An int hexadecimal number may contain up to 8 significant digits besides leading 0x prefix. Each hex digit is represented by 4 bits: 8=1000, F=1111, A=1010, and so on. 0x80000000=1000 0000 0000 0000 0000 0000 0000 0000 in binary. The left most bit represents the negative sign. So, if we convert binary to decimal as 8*(16 to the power of 7) or (2 to the power of 3)*(2 to the power of 28), we receive 2 to the power of 31. Remember, the sign is negative! And that equals -2 to the power of 31.