java String.valueOf(null)为什么会报空指针

萧枫 2015-08-20 04:50:44
该方法的源码是

public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}

传入null为什么会报错呢
...全文
1015 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
0萌萌哒0 2015-08-20
  • 打赏
  • 举报
回复
原因是null匹配的重载不是预期的String, 而是char[]。

public static void main(String[] args) {
	// 这个匹配参数为object的方法重载
	System.out.println(String.valueOf((Object)null));
	// 这个匹配参数为char[]的方法重载
	String.valueOf(null);
}
解决方案是明确参数类型。
-天宇 2015-08-20
  • 打赏
  • 举报
回复
引用 3 楼 tianyutaizi 的回复:
valueOf函数是多态方法, 我测试了下确实报空指针

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[])这个函数,没搞明白
说错了, 为什么会调用valueOf(char data[]),难道是char数组是所有valueOf参数中可接受null值的最小单位?
-天宇 2015-08-20
  • 打赏
  • 举报
回复
valueOf函数是多态方法, 我测试了下确实报空指针

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[])这个函数,没搞明白
t734070824 2015-08-20
  • 打赏
  • 举报
回复
String.valueOf(null)是调用了String类的静态方法valueOf,你传个null当然报错, public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); } public static void main(String[] args) { valueOf(null); } 这样就对了
三仙半 2015-08-20
  • 打赏
  • 举报
回复
直接调用

System.out.println(String.valueOf(null));
不可以,下面这样可以

Object obj=null;
System.out.println(String.valueOf(obj));
我分析,一个对象被赋值为null也还是一个对象,而null不是对象,所以不行。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧