String.valueOf

今天在排查问题的时候发现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会选取精确度较高的一个来执行。

时间: 2024-11-05 13:26:48

String.valueOf的相关文章

String、String.valueOf、toString 它们三者的区别总结

今天在使用这个的时候发现,他们三者好像在某些场所都是可以用的,但是不免会让人想到那既然它们三者这么的相似,那么总有些什么区别吧.我也在网上找了一些资料看.自己也看了API文档,就将他们三的区别总结一下吧.用了这么长时间,才发现有这些的不同,也是挺惭愧的. 先说他们三的作用是什么吧:没什么特别的作用,就是让我们得到的对象或参数类型,按照要求转成字符串的形式. String:毫无疑问,这种就是强转形式,简单方便,效率高.java程序员可能看到效率高或许有些激动,但是它有他的不好,那就是局限性.在ja

String.valueOf() 方法的使用

缺心眼的公牛 我每天都在成长和进步 1. 由 基本数据型态转换成 String String 类别中已经提供了将基本数据型态转换成 String 的 static 方法 也就是 String.valueOf() 这个参数多载的方法 有下列几种 String.valueOf(boolean b) : 将 boolean 变量 b 转换成字符串 String.valueOf(char c) : 将 char 变量 c 转换成字符串 String.valueOf(char[] data) : 将 ch

enum、String.valueOf()

enum:http://www.cnblogs.com/happyPawpaw/archive/2013/04/09/3009553.html. String.valueOf():http://blog.csdn.net/yuan444075705/article/details/11375969.

Java中String.valueOf()方法的解释

1. 由 基本数据型态转换成 String String 类别中已经提供了将基本数据型态转换成 String 的 static 方法 也就是 String.valueOf() 这个参数多载的方法 有下列几种 String.valueOf(boolean b) : 将 boolean 变量 b 转换成字符串 String.valueOf(char c) : 将 char 变量 c 转换成字符串 String.valueOf(char[] data) : 将 char 数组 data 转换成字符串 

(String)、toString、String.valueOf的区别

在Java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能.本文将对常用的转换方法进行一个总结. 常用的方法有(String)要转换的对象,Object#toString(),String.valueOf(Object)等. (String) 这是标准的类型转换,将object转成String类型的值.使用这种方法时,需要注意的是类型必须能转成String类型.因此最好用instanceof做个类型检查,以判断是否可以转换.否则容易抛出CalssCastException异

String.valueOf()方法注意

String.valueOf();可以将 int char long float double boolean char[] 转化为字符串输出,但不是这几个类型时候,则会使用Object类型接收,底层调用的是object.toString()输出地址等信息

java String.valueOf()的作用

在读取数据时需要对数据的强制转换,可采用String.valueOf(a),把a强制转换成字符串类型 有时候a本来就已经是字符串类型了,但是为了代码的严谨性,也会加入String.valueOf(a),这时String.valueOf(a)省略也不会出错的. 但有时会涉及到服务器的问题,所以还是加入String.valueOf(a)比较好. 使用 String.valueOf() 进行数据转换,如果被转换的数据为 null, 则这种方法将返回一个 "null" 字符串 String)

Java 之String.valueOf(obj)

实例代码如下: String str = null; String uSelectDate = String.valueOf(str); System.out.println("==================uSelectDate:"+uSelectDate); if(uSelectDate==null){ System.out.println("==================uSelectDate is null"); }else{ System.ou

Java 常用之String.valueOf、toString、(String)

在java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能 常用的方法有Object#toString(),(String)要转换的对象,String.valueOf(Object)等 字符串类型的转型在java中常用的方法有标题中的三种. 简单介绍: 1.toString,需要保证调用这个方法的类.方法.变量不为null,否则会报空指针. 2.String.valueOf.这个方法在使用的时候是有些特殊的.一般情况下,如果是确定类型的null传入,返回的是字符串"null