大坑!!!String.valueOf()输出“null“【查看源码】

发布时间:2023年12月22日

项目中使用String.valueOf(),结果在数据库中存入了? ?"null"? ? 这个字符串!!!!!

测试如下:

溯源:String.valueOf()被重载了多次,其中包含基本数据类型,包装类,和char数组。

重载的方法,默认会选择精度更高的。比如两个重载方法入参分别是List和ArrayList,那么调用的时候,会走ArrayList。

重载的数据。

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

public static String valueOf(char data[])

public static String valueOf(char data[], int offset, int count)

public static String valueOf(boolean b)

public static String valueOf(char c) 

public static String valueOf(int i)

public static String valueOf(long l)

public static String valueOf(double d)

当我们代码中写到,获取某个对象的值,这是很常见的业务场景。

Map<String, String> map = new HashMap<>();

String tmp = String.valueOf(map.get("test"));// test 是一个不存在的key

但是此时key可能不存在,value也必然不存在,结果就是null

String.valueOf(),就会走Object。

源码可以看到,判断为null,就返回"null"。这样就导致数据库存了一个"null"字符串。

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

总结,以后尽量在业务之前判空。

既然String.valueOf()底层也是toString(),为什么不直接用toString()???

  • String.valueOf()还重载了基本数据类型,基本数据类型不能toString(),
  • 避免了null的情况,null调用toString(),会报错。
    • 但也正是因为不会报错,所以他返回了一个"null"字符串,这就需要我们自己判断了。
文章来源:https://blog.csdn.net/m0_51360693/article/details/135157304
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。