记一次错误使用Integer.parseInt引起的bug

333 阅读1分钟

记一次错误使用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)