取消对 null 指针“l”的引用。_String.valueof(null)的意外

在整理其他类型转String类型的时候一般来说有两种方法,+""或者是String.valueof(),官方推荐使用String.valueof(),自己对String.valueof进行测试的时候无意中发现String.valueof(null)带来的异常问题,如下

第一种:

Object o = null;

String s = String.valueof(o);

程序会正常执行

第二种:

String s = String.valueof(null);

程序会报空指针异常

后来看源码发现这两种情况下调用的是不同的函数,这里涉及到java的重载,函数名称相同但是参数不同,如下:

String valueof(Object obj)

String valueof(char data[])

String valueof(int i)

String valueof(double d)

...

第一种情况下调用的函数是:

6df4cc480789345112ef931a8811c252.png

而第二种调用的函数是:

5ff276de2392e01d4deedf3e41e957e6.png

dbe2a0b17fd0c58de7dea577c6d9c05e.png

当value为null时候,自然value.length会报出空指针异常

为什么两者会调用不同函数,我们首先需要了解一些基本概念,一般我们知道Java分为两种数据类型,一种是基本数据类型,有八个分别是 byte short int long float double char boolean,一种是引用类型,包括类,接口,数组等等。而Java中还有一种特殊的 null 类型,该类型没有名字,所以不可能声明为 null 类型的变量或者转换为 null 类型,null 引用是 null 类型表达式唯一可能的值,null 引用也可以转换为任意引用类型。我们不需要对 null 类型有多深刻的了解,我们只需要知道 null 是可以成为任意引用类型的特殊符号。

当参数为null的时候,只有String valueof(Object obj)和String valueof(char data[])可以选择(其他重载函数不能编译通过),相比于String valueof(Object obj)来说,String valueof(char data[])更加精确,具有更高的优先级,这也是参数为null的时候调用String valueof(char data[])的根本原因;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值