String.valueOf引发的血案
1.String.valueOf(null) 会报错吗
感觉jdk做了容错处理不信你看源码
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
点进去报错的地方看看
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空对象
这货居然返回个"null"字符串 我去我要这玩意干啥子
上网找了找资料 *蓝链
小结:
- 是因为String.valueOf(char[] c)的方法要优先于String.valueOf(Object o) 因为char[] 更具体,所以优先选择,传入null也就进入这个方法了
- 第二个返回"null"字符串是个暗坑,大家最好自己写个StringUtil去避免
这个问题也暴露出对基础知识重载优先顺序的盲区,是个java程序员都知道啥是重载,多个方法先后顺序也不一定每个人都清楚,后面将记录一篇文章 理清重载的顺序