最近出现一个莫名奇妙的问题: 数据库中存储了 "null" 字符串……
用的 SpringCloud 远程调用接口, 传参为 null, 接到的参数值: “null”,导致上文的bug.
当时只能单独写了一个方法处理 “null”,对其进行了转换。
原因分析:
Java String 类源码:
/**
* 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();
}
String 类的 valueOf() 方法,如果接收到的参数是 null, 会将其转换为 “null”.
框架底层在做参数数据转换时, 直接使用了 valueOf() 方法,就会让 “null” 存储到数据库中。
看来 “先人” 们的代码也会有 Bug,String.valueOf(Object obj) 方法建议少用,或者用之前先判空。