很紧张,第一次写博客,作为一个小白将和你萌一起成长;
嗯,就聊聊开始写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 的 == )
好了不想写了,拜拜
欢迎指教