StringBuilder.append(Object)传入null时自动转为字符串"null",因内部调用String.valueOf(null);但append(String)传入null会抛NPE,因直接调用str.length()。

Java 中 StringBuilder.append(Object) 方法在传入 null 时,会自动将其转为字符串 "null",无需额外处理。
append(Object) 默认行为就是输出 "null"
当调用 sb.append(null)(参数类型为 Object)时,StringBuilder 内部会调用 String.valueOf(null),而该方法明确返回字符串 "null"。这是 JDK 的标准行为,安全且符合预期。
- 例如:
new StringBuilder().append(null).toString()结果是"null" - 这适用于所有重载中接受
Object的append方法
注意 String 类型参数不会触发此逻辑
如果传入的是 String 类型的 null(比如 sb.append((String)null)),会直接抛出 NullPointerException。
- 因为
append(String)方法内部会尝试调用str.length() - 所以显式转型为
String会绕过Object版本,导致 NPE - 避免写成
append((String) someVar),除非你确定它非 null
想统一处理 null?推荐提前转换
若业务逻辑要求对所有可能为 null 的值统一转成 "null" 字符串,建议在调用前做一次安全转换:
立即学习“Java免费学习笔记(深入)”;
-
sb.append(Objects.toString(obj, "null"))—— 最简洁可靠 - 或手动判断:
sb.append(obj == null ? "null" : obj.toString()) - 不推荐重写
append行为,保持语义清晰
实际使用建议
日常拼接中,直接传 null 是安全的,只要没强制转成 String 类型。遇到 NPE 时,优先检查是否误用了 append(String) 重载。
- 多数场景下,用
append(Object)就够了 - 日志、调试、JSON 拼接等需要显式显示
"null"的地方,这个特性很实用 - 团队协作时,可补充注释说明“此处 null 会被自动转为字符串 'null'”


















