String.valueOf
来源:互联网 发布:商标设计软件下载 编辑:程序博客网 时间:2024/05/16 19:35
今天在排查问题的时候发现String.valueOf 的一个有意思的问题:
第一种情况:
String.valueOf(null);
第二种情况:
Map<String, Object> map = new HashMap<String, Object>();String a = String.valueOf(map.get("a"));
第一种情况会报空指针异常,第二种情况不会报异常,只是得到一个null 。
上网查了一下,原因如下:
String.valueOf方法有好几个重载方法,但是由于null不可能赋值给基本数据类型,所以只剩下2个备选的方法:String valueOf(char data[]) 和 String valueOf(Object obj)
查看代码可以看到String valueOf(Object obj)进行了判空,而String valueOf(char data[])没有。所以很明显,第一种情况调用了String valueOf(char data[]),所以是报了空指针异常;而第二种情况下,调用了String valueOf(char data[]),所以没有报。
null对于String valueOf(char data[]) 和 String valueOf(Object obj)的参数都是使用的,那么java如何选择:
首先,对于第二种情况,很容易理解,由于map指定了泛型,所以从这个map取出来的肯定是一个Object 类型的参数,肯定会调用String valueOf(Object obj)方法。
对于第一种情况,java会选取精确度最高的一种重载方法。如果对于某个参数,String valueOf(char data[])可以适用的话,String valueOf(Object obj)是肯定可以适用的,所以String valueOf(char data[])的精确度就比String valueOf(Obect obj)的精确度要高,null同时适用于这两个方法,所以java会选取精确度较高的一个来执行。
1 0
- String.valueOf
- String.valueOf()
- String.valueOf
- String.valueOf()
- String.valueOf()
- String.valueOf()
- toString() ,String,String.valueOf
- java.toString() ,(String),valueOf
- java.toString() ,(String),valueOf
- java.toString() ,(String),valueOf
- toString与String.valueOf()
- String.valueOf和toString
- String.valueof使用
- 慎用String.valueOf()
- String.valueOf 用处
- .toString和String.valueOf()
- String.valueOf()的处理
- toString 和String.valueOf
- Maximum Subarray(最大子数组)
- 调用C++中的栈,队列和优先级队列库函数
- Java---03---数组
- 最长公共子序列(动态规划)
- 一招一个文件解决ndk编译文件Android.mk配置的所有问题
- String.valueOf
- Eclipse maven构建springmvc项目
- 【JS学习笔记】06 JavaScript HTML DOM 事件
- 找单词 2082 (母函数)蛋疼
- 动态链接机制详解及GOT和fPIC
- MongoDB 一对多关系建模
- 视频观看者的福音java 多行注释
- 无向图的实现
- ORA-01466 与 FLASHBACK_SCN=