Integer.parseInt转换非空字符串抛出NumberFormatException异常问题咨询
报错根因
- Java 中
Integer为32位有符号整数,合法取值范围是 -2147483648 到 2147483647 - 你输入的字符串
"8801609054"对应的数值为8801609054,远大于Integer的最大值2147483647,超出类型承载上限因此抛出NumberFormatException,和空值、null的触发场景无关
可落地解决方案
方案1:改用长整型接收数值
如果业务场景允许使用64位整数存储该数值,直接替换转换方法即可:
// 64位Long的取值范围为-9223372036854775808 ~ 9223372036854775807,完全覆盖8801609054的取值 long result = Long.parseLong("8801609054");
方案2:提前做范围校验后强转
如果业务要求必须返回Integer类型,先校验输入数值是否在合法范围内,超范围时提前处理:
String input = "8801609054"; long tempNum = Long.parseLong(input); if (tempNum > Integer.MAX_VALUE || tempNum < Integer.MIN_VALUE) { // 此处添加自定义业务提示/异常处理逻辑 throw new IllegalArgumentException("输入数值超出整型可承载范围"); } int result = (int) tempNum;
内容的提问来源于stack exchange,提问作者rr11
相关产品推荐
相关产品推荐

