记一次错误使用Integer.parseInt引起的bug
事情是这样的,原本呢,我需要将8位的渠道编码转换成int类型,但是我错误的将手机号转换成了int类型导致了报错。将代码简化之后其实就是下面的
package com.daylywork.study;
public class ZhuanHuan {
public static void main(String[] args){
String a="18233166440";
System.out.println(Integer.parseInt(a));
}
}
执行后报错:
Exception in thread "main" java.lang.NumberFormatException: For input string: "18233166440"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:583)
at java.lang.Integer.parseInt(Integer.java:615)
at com.daylywork.study.ZhuanHuan.main(ZhuanHuan.java:6)
想了想,就算我用错了字段,但是这手机号也应该可以转换成数字啊,之前其他人的代码也是用的Integer.parseInt,怎么我用就报错呢,在println处打了个断点,发现了其中的这么一个字段
int limit = -Integer.MAX_VALUE;
看到这里就明白了,我这个手机号已经突破了Int的最大值了,当然会报错,那如果我们非要用这个手机号怎么办呢,还是转化成Long类型吧。
下面的代码算是个简单的验证
package com.daylywork.study;
public class ZhuanHuan {
public static void main(String[] args){
String s="2147483647";
System.out.println(Integer.parseInt(s));
String sss="2147483648";
System.out.println(Long.parseLong(sss));
String ss="2147483648";
System.out.println(Integer.parseInt(ss));
}
}
结果:
2147483647
2147483648
Exception in thread "main" java.lang.NumberFormatException: For input string: "2147483648"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:587)
at java.lang.Integer.parseInt(Integer.java:615)
at com.daylywork.study.ZhuanHuan.main(ZhuanHuan.java:10)