String.valueOf更安全,因它对null返回"null"而不抛异常,且支持基本类型和对象;而toString()遇null抛NullPointerException,+""虽不崩但有性能开销且语义不清。

String.valueOf 是 Java 中最常用、最安全的将任意类型转为字符串的方式,它不抛出空指针异常,也不依赖对象的 toString() 实现是否健壮。
为什么优先用 String.valueOf 而不是 + "" 或 toString()?
直接拼接空字符串(如 obj + "")看似简洁,但对 null 值会变成字符串 "null",且底层触发 StringBuilder 构建,有轻微开销;而调用 obj.toString() 在 obj 为 null 时会直接抛出 NullPointerException。String.valueOf 内部做了 null 判断:null 时返回字面量 "null",非 null 时才调用 toString(),既安全又语义清晰。
支持哪些参数类型?常见用法一览
String.valueOf 重载了多个版本,覆盖基本类型和引用类型:
-
基本类型:如
String.valueOf(123)→ "123",String.valueOf(true)→ "true",String.valueOf(3.14f)→ "3.14" -
数组:注意!
String.valueOf(new int[]{1,2,3})返回的是类似 "[I@xxxxx" 的默认哈希表示,不是内容字符串——需改用Arrays.toString() -
Object 引用:自动调用其 toString(),若为 null 则返回 "null";例如
String.valueOf(null)→ "null",String.valueOf(new Date())→ 标准日期字符串
与 String.valueOf 相关的典型误区
容易混淆的几个点:
立即学习“Java免费学习笔记(深入)”;
- 不要误以为
String.valueOf("123")会做数值解析——它只是原样返回字符串本身,不做任何类型转换 - 对包装类(如 Integer、Boolean),String.valueOf 和其自身的 toString() 行为一致,但前者更统一、更容错
- 格式化需求(如保留两位小数、补零)不能靠 String.valueOf 解决,应使用
String.format()或DecimalFormat
实际编码中的推荐写法
日常开发中,建议统一用 String.valueOf 处理可能为 null 的变量或多种类型混合场景:
- 日志拼接:
log.info("user id: {}, name: {}", String.valueOf(userId), String.valueOf(userName)) - JSON 字段兼容处理:
jsonObject.put("score", String.valueOf(score)),避免 score 为 null 导致序列化失败 - 数据库字段映射时兜底:
rs.getString("status")可能为 null,转字符串用String.valueOf(rs.getObject("status"))更稳妥


















