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

被折叠的 条评论
为什么被折叠?



