字符串转数字 的NumberFormatException

很紧张,第一次写博客,作为一个小白将和你萌一起成长;
嗯,就聊聊开始写web项目开始字符串转数字老是碰到的空指针异常吧;
没错,就是这个
Exception in thread “main” java.lang.NumberFormatException: null
字符串转数字可以用这两种方法
String str = “12”;
Integer.parseInt(str);
Integer.valueOf(str);
嗯,挺好用的;
但是由于从前台得到的数据可能为null,你看到的就是这样的啦!
Exception in thread “main” java.lang.NumberFormatException: null
好气,查阅资料发现 Integer.parseInt(str); 返回的 int 类型
Integer.valueOf(str); 返回的是 Integer 类型;
“`
System.out.println((Integer.valueOf(“12”)) instanceof Integer);
//运行得到的结果是 true 好像应该是Integer 了吧
//那我可不可以用 Integer 接这个数据 就算结果是null 也无所谓了

    Integer j = Integer.valueOf(null);
    //但是还是原来的问题,好气

我就点进了源码看看;
先点了 Integer.parseInt(str);
public static int parseInt(String s) throws NumberFormatException {
return parseInt(s,10);
}
看样子是要默认转 10 进制了 ,不过不影响 ,继续看看
public static int parseInt(String s, int radix)
throws NumberFormatException
{
/*
* WARNING: This method may be invoked early during VM initialization
* before IntegerCache is initialized. Care must be taken to not use
* the valueOf method.
*/

    if (s == null) {
        throw new NumberFormatException("null");
    } //部分片段
//他直接就给我报异常 ,好不给面子,不过返回值是int 型,影响不大  
(顺便说说,直接将非法的情况,和特殊情况找到是一个不错的习惯,免得我辛辛苦苦帮你做,你最后告诉我学历不够,不让我进公司,你不是欺骗我感情吗)
其他代码我就不展示了
接下来是  Integer.valueOf(str);
点进去就是
 public static Integer valueOf(String s) throws NumberFormatException {
    return Integer.valueOf(parseInt(s, 10));
}

Integer 返回值没错,但是,好像、似乎、仿佛 去调用了 parseInt(s, 10)
刚刚的那个方法,为啥不自己重新写呢,也不做任何判断,那我不是依旧报错
难受 ,继续看看
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
嗯,new 了 一个 Integer 对象,
哦!不对IntegerCache 是什么鬼,



刚刚去看了一波源码,嗯,没错,看不太懂(不要告诉其他人!)
大概就是最低 为-128 ,最高默认127 然后这个不清楚integerCacheHighPropValue,这个和最高的取最大 。先放着吧
有知道也可以聊聊
总之处于 IntegerCache 范围的 就不会去new一个 ,否则 new一个新的Integer 对象(这个据说面试可能会考,详情见 Integer常量池和 Integer 的 == )
好了不想写了,拜拜
欢迎指教

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值