String.valueOf引发的血案

1.String.valueOf(null) 会报错吗

感觉jdk做了容错处理不信你看源码

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

String.valueOf引发的血案
点进去报错的地方看看

public static String valueOf(char data[]) {
    return new String(data);
}
// 这里报错
public String(char value[]) {
    this.value = Arrays.copyOf(value, value.length);
}

2.String.valueOf(obj) (obj为null) 返回什么

应该是个null空对象
String.valueOf引发的血案
这货居然返回个"null"字符串 我去我要这玩意干啥子

上网找了找资料 *蓝链

String.valueOf引发的血案

小结:

  • 是因为String.valueOf(char[] c)的方法要优先于String.valueOf(Object o) 因为char[] 更具体,所以优先选择,传入null也就进入这个方法了
  • 第二个返回"null"字符串是个暗坑,大家最好自己写个StringUtil去避免

这个问题也暴露出对基础知识重载优先顺序的盲区,是个java程序员都知道啥是重载,多个方法先后顺序也不一定每个人都清楚,后面将记录一篇文章 理清重载的顺序