为什么这个Java parseInt十六进制字符串导致NumberFormatException?

Ign*_*eme 0 java parseint

Integer.parseInt("ff8ca87c", 16);
Run Code Online (Sandbox Code Playgroud)

由于某种原因,这给了我一个NumberFormatException.你知道为什么吗?

Exception in thread "main" java.lang.NumberFormatException: For input string: "ff8ca87c"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.valueOf(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

Pol*_*ial 6

它失败的原因是你试图+0xff8ca87c输入有符号整数.32位有符号整数的最大值是+0x7fffffff,因为最高有效位用于存储符号.

尝试使用long替代品.64位signed int的最大值是0x7fffffffffffffff,在这种情况下,这足以满足您的需要.

或者,在Java 8中,您可以使用Integer.parseUnsignedInt("ff8ca87c", 16);将该值视为无符号整数.