| 方法 | 描述 | 优点 | 缺点 | 推荐场景 |
|---|---|---|---|---|
Long.toString(long l) |
Long 类的静态方法,专门用于转换。 |
最直接、最常用,代码可读性高。 | 无明显缺点。 | 绝大多数情况下的首选。 |
String.valueOf(long l) |
String 类的静态方法,重载形式支持所有基本类型。 |
统一的 API,当需要处理多种类型时很方便。 | 功能与 Long.toString() 完全相同,只是来源类不同。 |
当需要将多种基本类型(int, double, boolean 等)统一转为 String 时。 |
"" + long |
使用字符串连接操作符。 | 非常简洁,代码量最少。 | 性能稍差,会创建一个临时的 StringBuilder 对象。 |
代码极简、非性能关键的场景。 |
String.format() |
使用格式化字符串。 | 功能强大,可以格式化数字(如补零、千分位分隔符)。 | 代码最冗长,对于简单转换是“杀鸡用牛刀”。 | 需要对输出格式有特殊要求时。 |
使用 Long.toString(long l) - 最推荐
这是最直接、最符合语义的方法。Long 类提供了一个静态方法 toString(),专门用于将 long 值转换为 String 表示。

语法:
String str = Long.toString(longValue);
示例代码:
long number = 123456789L; String str = Long.toString(number); System.out.println(str); // 输出: 123456789 System.out.println(str.getClass().getName()); // 输出: java.lang.String // 处理负数 long negativeNumber = -987654321L; String negativeStr = Long.toString(negativeNumber); System.out.println(negativeStr); // 输出: -987654321
优点:
- 意图明确: 代码清楚地表明了将一个
long转换为String的意图。 - 性能良好: 这是 JVM 内部优化的标准方法,效率很高。
- 可读性强: 是 Java 开发者最熟悉和最容易理解的写法。
使用 String.valueOf(long l) - 通用之选
String 类提供了 valueOf() 方法的一系列重载,用于将各种基本数据类型(char, int, long, double, boolean 等)转换为 String。

语法:
String str = String.valueOf(longValue);
示例代码:
long number = 123456789L; String str = String.valueOf(number); System.out.println(str); // 输出: 123456789 System.out.println(str.getClass().getName()); // 输出: java.lang.String
优点:
- API 统一: 如果你有一段代码需要处理多种基本类型并转换为
String,使用String.valueOf()可以保持 API 的一致性。 - 功能相同: 对于
long类型,它的底层实现和Long.toString()是一样的,性能和结果没有区别。
与 Long.toString() 的选择:

- 如果你的代码只关心
long转String,使用Long.toString()更能体现具体操作。 - 如果你的代码是一个通用方法,可能需要处理多种类型,或者为了保持风格统一,
String.valueOf()是一个很好的选择。
使用字符串连接 "" + long - 简便写法
这是一种非常简洁的写法,利用了 Java 的字符串连接特性,当任何类型与 String 进行 操作时,JVM 会自动调用该类型的 toString() 方法。
语法:
String str = "" + longValue;
示例代码:
long number = 123456789L; String str = "" + number; System.out.println(str); // 输出: 123456789
内部工作原理: 这个操作实际上会被编译器优化为:
// 编译器生成的等价代码
String str = new StringBuilder().append("").append(number).toString();
这会创建一个临时的 StringBuilder 对象,然后进行两次 append 操作,最后调用 toString()。
优点:
- 极其简洁: 键盘敲击最少,适合在快速编码或代码量极少的场景(如日志输出)中使用。
缺点:
- 性能开销: 相比前两种方法,它会多创建一个
StringBuilder实例,在循环等高频调用场景下,会带来不必要的性能开销。 - 可读性争议: 一些开发者认为这种写法不够“纯粹”,因为它混合了类型转换和字符串操作。
使用 String.format() - 格式化之王
当你不仅需要转换,还需要对数字的格式进行特殊控制时,String.format() 是最佳选择,它提供了类似 C 语言 printf 的强大格式化功能。
语法:
String str = String.format("%d", longValue);
%d 是 long 或 int 类型的格式说明符。
示例代码:
long number = 123456789L;
// 1. 基本转换
String str1 = String.format("%d", number);
System.out.println(str1); // 输出: 123456789
// 2. 补零(格式化为10位,不足前面补0)
String str2 = String.format("%010d", number);
System.out.println(str2); // 输出: 000123456789
// 3. 添加千分位分隔符
String str3 = String.format("%,d", number);
System.out.println(str3); // 输出: 123,456,789
// 4. 格式化为16进制
String str4 = String.format("%x", number);
System.out.println(str4); // 输出: 75bcd15
优点:
- 功能强大: 可以轻松实现补零、千分位、进制转换等复杂格式化需求。
- 灵活性高: 是处理复杂输出格式的标准工具。
缺点:
- 语法冗长: 对于简单的转换,
String.format()的写法比前三种方法都要啰嗦。 - 性能开销: 格式化解析本身比直接转换要慢。
性能对比
在大多数现代 JVM 上,Long.toString() 和 String.valueOf() 的性能几乎没有差别,都是最优选择。"" + long 的性能略差,而 String.format() 是最慢的。
- 日常开发、追求代码清晰和性能:请使用
Long.toString(long)。 - 需要处理多种数据类型或保持 API 风格统一:请使用
String.valueOf(long)。 - 写代码图省事,且对性能不敏感(如单次日志打印):可以使用
"" + long。 - 需要对数字进行格式化(如补零、千分位):请使用
String.format()。
