直接上源码
/**
* Returns the string representation of the {@code Object} argument.
*
* @param obj an {@code Object}.
* @return if the argument is {@code null}, then a string equal to
* {@code "null"}; otherwise, the value of
* {@code obj.toString()} is returned.
* @see java.lang.Object#toString()
*/
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
这里面分三种情况
传入的对象引用的值是null
Interger a=null;
String.valueOf(a);
这种情况下得到的是一个“null”字符串
传入null
String.valueOf(null)
出现NPE异常,原因是引用为null,空指针。
传入正常值
这种是最普通的,就不多废话
隐藏坑
主要的点是第一种,对象引用指向null,这个时候得到null的字符串,如果在业务逻辑中用这个来作为校验的依据,就容易出现请求带上null的字符串。
会导致无限达成一致条件,这就是隐藏坑所在。
解决方案
当你转换后的值如果是用来作为判断是否满足的依据时,请先将上一步的结果判断是否为null,
在不为null的情况下再去进行字符串的转换,即可避免这个问题