在 Java 中,将 int 类型转换为 String 类型有多种方法,每种方法都有其适用场景和优缺点,下面我将详细介绍几种常用的方法,并提供代码示例和性能分析。

使用 String.valueOf()
这是最常用、最推荐的方法,它是一个静态方法,专门用于将基本数据类型(如 int, double, boolean 等)和对象转换为字符串。
特点:
- 简洁明了:代码可读性高,意图明确。
- 性能较好:在大多数情况下,它的性能和
Integer.toString()相当,甚至更好。 - 安全:如果传入的
int变量是null(虽然int是基本类型,不可能为null,但对于其包装类IntegerString.valueOf(null)会返回字符串"null"),它也能优雅地处理,而不会抛出NullPointerException。
示例代码:
int number = 123; String str1 = String.valueOf(number); // 推荐 System.out.println(str1); // 输出: 123 System.out.println(str1.getClass().getName()); // 输出: java.lang.String
使用 Integer.toString()
这是另一种非常直接和高效的方法。Integer 类是 int 的包装类,它提供了一个静态方法 toString() 来完成转换。

特点:
- 性能极高:在纯粹的性能测试中,
Integer.toString()通常是所有方法中最快的,因为它直接进行底层转换,没有额外的函数调用开销(尽管String.valueOf()内部也是调用它)。 - 意图明确:代码直接表明了要将一个整数转换为字符串。
示例代码:
int number = 456; String str2 = Integer.toString(number); System.out.println(str2); // 输出: 456
使用空字符串拼接
这是一种非常简洁的“技巧”,通过将 int 与一个空字符串 进行连接,利用 Java 的 运算符重载,自动将 int 转换为 String。
特点:

- 代码最短:在代码行数上非常简洁。
- 性能略差:在内部,JVM 会创建一个临时的
StringBuilder对象来执行拼接操作,因此其性能通常不如前两种方法,虽然差异在现代 JVM 中可能微乎其微,但在性能敏感的循环中,这种差异会被放大。 - 可读性:对于一些开发者来说,这种写法可能不够直观。
示例代码:
int number = 789; String str3 = number + ""; System.out.println(str3); // 输出: 789
使用 String.format()
当你需要将整数嵌入到一个更大的、格式化的字符串中时,String.format() 是一个非常强大的选择,它使用 C 语言风格的格式化说明符。
特点:
- 功能强大:不仅可以进行类型转换,还能控制数字的格式,如补零、指定宽度等。
- 性能较差:因为它涉及到格式化解析,所以性能是这几种方法中最差的。仅推荐在需要格式化输出的场景下使用,而不是为了单纯的类型转换。
示例代码:
int number = 99;
String str4 = String.format("%d", number); // %d 表示十进制整数
// 格式化示例:补零
String formattedStr = String.format("%05d", number); // 输出 "00099"
System.out.println(str4); // 输出: 99
System.out.println(formattedStr); // 输出: 00099
性能对比
在大多数实际应用中,性能差异可以忽略不计,但如果你在性能极端敏感的环境(如高频交易、大型游戏循环)下,选择就变得重要了。
以下是一个简单的 JMH (Java Microbenchmark Harness) 测试结果(趋势):
| 方法 | 性能 | 推荐度 | 适用场景 |
|---|---|---|---|
Integer.toString() |
最快 | ⭐⭐⭐⭐⭐ | 追求极致性能,只需转换类型。 |
String.valueOf() |
极快 (与 toString 几乎持平) |
⭐⭐⭐⭐⭐ | 最推荐,可读性好,性能卓越,是通用场景下的最佳选择。 |
| (空字符串拼接) | 较快 (略慢于前两者) | ⭐⭐⭐ | 代码行数最少,适合快速编写,但不推荐在性能关键路径使用。 |
String.format() |
最慢 | ⭐ | 仅用于格式化字符串,需要补零、指定宽度等。 |
- 日常开发首选:
String.valueOf(),它清晰、安全且性能足够好。 - 性能至上:
Integer.toString(),如果你在基准测试中发现它是瓶颈,可以切换到这个。 - 格式化输出:
String.format(),当你需要控制输出格式时,这是不二之选。 - 避免:仅仅为了类型转换而使用 的方式,因为它牺牲了性能来换取代码的简洁性,而
String.valueOf()同样简洁且性能更好。
特殊情况:int 与 Integer 的转换
需要注意的是,int 是基本类型,而 String.valueOf() 和 Integer.toString() 都能很好地处理它,当你有一个 Integer 对象(可能是 null)时,情况略有不同。
// 对于 Integer 对象 Integer numberObj = 100; // 1. String.valueOf() - 推荐 // numberObj 为 null,会返回字符串 "null",不会抛出异常 String strFromObj1 = String.valueOf(numberObj); // 2. Integer.toString() - 需要判空 // numberObj 为 null,会抛出 NullPointerException String strFromObj2 = numberObj != null ? numberObj.toString() : "null"; // 3. 对象 + "" - 同样需要判空 String strFromObj3 = numberObj + ""; // numberObj 为 null,会抛出 NullPointerException
当处理可能为 null 的 Integer 对象时,String.valueOf() 是最安全的选择。
