用于收录开发过程中遇到的各种诡异的源码
String.valueOf()
故事情节
类型转换大家应该都用过吧,下面三种方式都是将一个实现,然后故事来了,在某个深夜,博主在某个寂静无人的公司
奋笔疾书(奋键疾程)的时候,突然一台服务器反馈了一条异常信息,异常的大改意思就是找不到一个为“null”的属性,观其代码分明已经进行了判空,但还是不停报错,打断点猛然发现,,,这里的null并不是空指针,而是字符串!!!!!!!“null”,第一反应就是哪个妹子判空的时候返回的字符串,转念一想,不对呀!技术部哪里来的妹子。继续断点,发现问题发生在String.valueOf(Object obj)这里。贴一下实现源码return (obj == null) ? "null" : obj.toString();
Java这里竟然返回的是字符串空,我的天哪,这是当初哪个实习生(背锅侠)写的吗。于是博主又手动加了一条判空规则。
你以为故事结束了吗?并没有,我又测试了一下String.valueOf(null);发现竟然出现空指针异常,因为jdk将null认为属于char data[]类型,而对应的处理是
return new String(data);
这样进行处理
总结
对于String str1=obj.toString();这种方式,obj为空是会报空指针异常
对于String str2=(String)obj;这种方式,可能会又类型转换异常
对于String str3=String.valueOf(obj);这种方式,如果obj为空会返回字符串“null”
Object obj=“asfadsf”;
String str1=obj.toString();
String str2=(String)obj;
String str3=String.valueOf(obj);