【问题标题】:Why do I get a NumberFormatException with this Integer.parseInt(x, y)?为什么我会用这个 Integer.parseInt(x, y) 得到 NumberFormatException?
【发布时间】:2026-01-17 00:45:02
【问题描述】:

我的代码很简单:

int idec = Integer.parseInt(value, 16);

当我输入值“01dae610”时,我正确地得到了“31122960”。 当我输入值“d149e510”时,我得到一个 java.lang.NumberFormatException。正确的值为:“3511280912”。

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

【问题讨论】:

    标签: java hex parseint


    【解决方案1】:

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

    【讨论】:

    • 谢谢,我太傻了。我以为我在 int 范围内。
    【解决方案2】:

    int 在 Java 中是 signed - 所以最大值是 231 - 1.

    如果您使用Long.parseLong(value, 16),您将获得所需的值。然后,如果您愿意获得正确的位模式,则可以转换回 int,但将其解释为负值。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        Integer.MAX_VALUE 是 2147483647,低于您的预期值。所以这个字符串不代表任何可以解析成int的东西。因此例外。

        【讨论】:

          【解决方案5】:

          来自here

          int 数据类型是一个 32 位有符号二进制补码整数。它有 最小值为 -2,147,483,648,最大值为 2,147,483,647 (含)。

          3,511,280,912 > 2,147,483,647,这解释了NumberFormatException

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

          long 数据类型是一个 64 位有符号二进制补码整数。它有 最小值为 -9,223,372,036,854,775,808,最大值为 9,223,372,036,854,775,807(含)。

          【讨论】: