见鬼的Java源码

用于收录开发过程中遇到的各种诡异的源码

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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值