我收到String 9999999990的NumberFormatException,但是当我使用1111111110时没有 当我通过该字符串调用Integer.parseInt时。 让我知道有什么不对。
String str="9999999990";
int f = Integer.parseInt("2147483647");// No Exception here
int x =Integer.parseInt(str); // Exception is thrown here
答案 0 :(得分: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
,它将处理更大的数字。
答案 1 :(得分:6)
int
的最大值只能为2147483647,因此如果您尝试解析的数字大于该值,您将获得异常(因为它不是有效的{{1} }}。)
int
将处理更大的数字,但请记住它仍然有一个上限(2 ^ 63-1)。如果你真的需要一个没有上限的类型,那么你必须使用BigInteger
(它有一个带字符串的构造函数。)
(您可以找到有关所有原始数据类型及其最大值here的更多信息。)