的Integer.parseInt( "9999999990");

gir*_*iri 3 java exception

我得到字符串9999999990的NumberFormatException但当我在该字符串上调用Integer.parseInt时使用1111111110时没有.让我知道有什么不对.

String str="9999999990";
  int f = Integer.parseInt("2147483647");// No Exception here
        int x =Integer.parseInt(str);   // Exception is thrown here 
Run Code Online (Sandbox Code Playgroud)

rge*_*man 7

Integer.parseInt当它解析的内容无法表示为时,将抛出异常int.第一个例子是近100亿,大于最大可能的int,超过20亿.

Integer.parseInt(String)委托给Integer.parseInt(String, 10),带基数的版本,以及那些Javadocs状态:

如果发生以下任何一种情况,则抛出NumberFormatException类型的异常:

  • 第一个参数为null或者是长度为零的字符串.
  • 基数小于Character.MIN_RADIX或大于Character.MAX_RADIX.
  • 字符串的任何字符都不是指定基数的数字,除了第一个字符可以是减号' - '('\ u002D')或加号'+'('\ u002B'),前提是字符串是长度超过1.
  • 字符串表示的值不是int类型的值.

(强调我的)

如果您需要解析它,您可以使用Long.parseLong,它将处理更大的数字.

  • 或者,嘿,如果数字对于 long 来说太大了,`new BigInteger(hugeHonkingNumberString)` (2认同)

Mic*_*rry 6

一个int只能有一个最大值2147483647,所以如果你试图解析一个大于那个的数字你会得到一个异常(因为它不是有效的int.)

Long.parseLong()将处理更大的数字,但请记住它仍然有一个上限(2 ^ 63-1).如果你真的需要一个没有上限的类型,你必须使用BigInteger(它有一个带字符串的构造函数.)

(您可以在此处找到有关所有原始数据类型及其最大值的更多信息.)