我得到字符串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)
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
,它将处理更大的数字.
一个int
只能有一个最大值2147483647,所以如果你试图解析一个大于那个的数字你会得到一个异常(因为它不是有效的int
.)
Long.parseLong()
将处理更大的数字,但请记住它仍然有一个上限(2 ^ 63-1).如果你真的需要一个没有上限的类型,你必须使用BigInteger
(它有一个带字符串的构造函数.)
(您可以在此处找到有关所有原始数据类型及其最大值的更多信息.)
归档时间: |
|
查看次数: |
646 次 |
最近记录: |