String.valueOf引发的血案

本文探讨了Java中String.valueOf()方法的使用误区,特别是当参数为null时的行为,以及重载方法的选择顺序可能导致的意外结果。建议开发者在处理null值时采取额外的预防措施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

NPE报错
点进去报错的地方看看

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空对象
image
这货居然返回个"null"字符串 我去我要这玩意干啥子

上网找了找资料 stackoverflow蓝链

image

小结:

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值