项目中使用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()???