我从API接收下一个字符串:
String userId = "4463570100035744";
我需要将它转换为int,所以我尝试了下一个代码:
try {
int id = Integer.parseInt(userId);
} catch (NumberFormatException e){
e.printStackTrace();
}
但我仍然抓住了例外......
可能是什么原因?
答案 0 :(得分:5)
原因:值超出了int的范围
操作:您必须使用Long而不是Integer。请使用long / Long。
Integer.MAX_VALUE = 2147483647
Integer.MIN_VALUE = -2147483648
Long.MAX_VALUE = 9223372036854775807
Long.MIN_VALUE = -9223372036854775808
答案 1 :(得分:0)
将变量userId
作为String并将整数值放入其中然后解析它以整数转换。你的错误是你把整数值放在字符串变量userId
中。
你需要这样说:
String userId = "4463570100035744";
还要记住变量的大小。我认为价值太大而不是int
的大小。
现在,在人们发布您实际问题的答案后,您就编辑了自己的问题。
答案 2 :(得分:0)
4463570100035744对于Int32变量来说太大了。您可以考虑使用long
变量类型。
答案 3 :(得分:0)
您可以参考Java基元类型的文档来为变量选择合适的类型:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
可用于存储像userId这样的数字的基元类型是:
byte
(1字节)short
(2字节)int
(4字节)float
(4字节)long
(8字节)double
(8字节)注意你的int 4463570100035744
与int
的比较差异为4,463,567,952,552,097。
您的ID变量最适合long
。
try
{
long id = Long.parseLong(userId);
System.out.println("long id = " + id);
}
catch (NumberFormatException nfe)
{
System.out.println("NumberFormatException: " + nfe.getMessage());
}