String.valueOf()的隐藏坑

直接上源码

/**
     * 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的情况下再去进行字符串的转换,即可避免这个问题

经验分享 程序员 微信小程序 职场和发展