@Test
public void test1(){
System.out.println(String.valueOf(null));
}
@Test
public void test2(){
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", null);
String str = String.valueOf(map.get("id"));
System.out.println(str);
}
在lang包里String.valueOf()方法被重载过9次
多个重载方法均能匹配的条件下,优先会选择精度高的那个,也可以说是范围最小的那个
char[]和object均能匹配null值,char[]继承自Object故范围更小,所以对test1情况:
public static String valueOf(char data[]) {
return new String(data);
}
String.valueOf(null)会进入valueOf(char data[])方法,进而在new String(null)方法内获取value.length时报出空指针异常
对test2情况:
map已经提前声明V为Object,因此调用的是
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}