62,614
社区成员
发帖
与我相关
我的任务
分享
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
public static void main(String[] args) {
// 这个匹配参数为object的方法重载
System.out.println(String.valueOf((Object)null));
// 这个匹配参数为char[]的方法重载
String.valueOf(null);
}
解决方案是明确参数类型。
Exception in thread "main" java.lang.NullPointerException
at java.lang.String.<init>(String.java:166)
at java.lang.String.valueOf(String.java:2996)
at Fu.main(Fu.java:5)
我的是java1.8, 看下String类166行
public String(char value[]) {
this.value = Arrays.copyOf(value, value.length);// 166行
}
到这里就看明白了,至于 String.valueOf(null)为什么会调String(char value[])这个函数,没搞明白
System.out.println(String.valueOf(null));
不可以,下面这样可以
Object obj=null;
System.out.println(String.valueOf(obj));
我分析,一个对象被赋值为null也还是一个对象,而null不是对象,所以不行。