String.valueOf()转换空对象

文章讨论了在Java中使用String.valueOf()方法转换null对象时会返回null字符串,而使用强转(String)则会得到null。作者指出在判空操作中,null字符串会导致问题,并通过源码分析解释了valueOf()方法的行为。作者认为在某些情况下,直接调用对象的toString()可能更合适。

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

以前一直以为转字符串用String.valueOf()非常优雅,是完爆(String) 这种强转方式的,直到今天遇到了一个坑才发现String.valueOf()并非我想的那么好用。
当我用String.valueOf()去转一个为null的对象时,会返回"null",如果用(String)的方式强转的话会得到一个null

HashMap<Object, Object> map = new HashMap<>();
Object o = map.get("123");
System.out.println("o = " + o); // o=null
String s1 = String.valueOf(o);
System.out.println("s1 = " + s1); // s1="null"
String s2 = (String) o;
System.out.println("s2 = " + s2); // null

显然我是希望得到一个null的而不是一个"null",因为在判空的时候我通常喜欢用StringUtils.isBlank(str),"null"不会被过滤掉
如果用String.valueOf()直接转null会报空指针

String s3 = String.valueOf(null); // 报空指针
System.out.println("s3 = " + s3);

其实看一下valueOf()的源码就能明白是为什么了

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

如果valueOf()转的是null就返回"null’,否则调用对象的toString(),所以感觉valueOf()好像没什么用,如果我需要.toString()我为什么不手动.toString呢?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值