Java 为什么这个整数会有NumberFormatException.parseInt(x,y)?

Java 为什么这个整数会有NumberFormatException.parseInt(x,y)?,java,hex,parseint,Java,Hex,Parseint,我的代码很简单: int idec = Integer.parseInt(value, 16); 当我输入值“01dae610”时,我正确地得到“31122960”。 当我输入值“d149e510”时,我得到一个java.lang.NumberFormatException。正确的值为:“3511280912” 我不知道这是为什么。有人能帮忙吗?因为这超出了int的范围。改为使用long/long。int是用Java签名的-因此最大值为231-1 如果使用Long.parseLong(值,16

我的代码很简单:

int idec = Integer.parseInt(value, 16);
当我输入值“01dae610”时,我正确地得到“31122960”。 当我输入值“d149e510”时,我得到一个java.lang.NumberFormatException。正确的值为:“3511280912”


我不知道这是为什么。有人能帮忙吗?

因为这超出了
int
的范围。改为使用
long
/
long

int
是用Java签名的-因此最大值为231-1


如果使用
Long.parseLong(值,16)
您将获得所需的值。如果您很高兴得到正确的位模式,但却被解释为负值,那么您可以回溯到
int

只是因为它超出了
int
的范围。您应该改用
long
数据类型。

Integer。最大值为2147483647,低于您期望的值。因此,这个字符串并不表示任何可以解析为
int
的内容。因此出现例外情况。

来自:

int数据类型是一个32位带符号2的补码整数。它有 最小值为-2147483648,最大值为2147483647 (包括在内)

3511280912>2147483647,这解释了
NumberFormatException

但是,您可以使用
long
。从同一页:

长数据类型是一个64位有符号2的补码整数。它有 最小值为-9223372036854775808,最大值为 9223372036854775807(含)


谢谢,我真是太蠢了。我以为我在整数范围内。