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

使用 String.valueOf() (推荐)
这是最常用、最简洁且性能最好的方法之一,它是一个静态方法,可以直接将基本数据类型(如 int)转换为其对应的字符串表示。
特点:
- 简洁直观:代码可读性高。
- 性能优异:在大多数情况下,这是最快的转换方法。
- 安全性高:如果传入的
int是null,String.valueOf()会抛出NullPointerException,但对于int这种基本类型,变量本身不可能是null,所以非常安全。
代码示例:
int number = 123; String str1 = String.valueOf(number); // 将 int 123 转换为 "123" System.out.println(str1); // 输出: 123 System.out.println(str1.getClass().getName()); // 输出: java.lang.String
使用 Integer.toString()
这是另一种非常高效和常用的方法。Integer 是 int 的包装类,toString() 方法是其内置的转换方法。

特点:
- 性能优异:与
String.valueOf()的性能非常接近,通常被认为是最佳选择。 - 代码清晰:明确表达了将整数转换为字符串的意图。
代码示例:
int number = 456; String str2 = Integer.toString(number); // 将 int 456 转换为 "456" System.out.println(str2); // 输出: 456
使用空字符串拼接 ("" + int)
这是一种非常普遍的“快捷”写法,通过将 int 与一个空字符串进行连接,利用 Java 的自动类型转换机制来完成转换。
特点:

- 极其简洁:代码最短,写起来最快。
- 性能稍差:在底层,这种方式会先创建一个
StringBuilder对象,然后执行append操作,虽然现代 JVM 对此优化得很好,性能差距微乎其微,但在追求极致性能的代码中,前两种方法仍然是首选。 - 可读性问题:一些代码风格规范(如 Google Java Style Guide)不推荐这种方式,因为它可能不够明确。
代码示例:
int number = 789; String str3 = "" + number; // 将 int 789 转换为 "789" System.out.println(str3); // 输出: 789
使用 String.format()
这个方法的功能非常强大,主要用于格式化字符串,虽然可以用来做简单的类型转换,但它主要用于更复杂的场景,例如控制数字的格式(如补零、指定宽度等)。
特点:
- 功能强大:主要用于格式化输出。
- 性能较低:因为它涉及格式化解析,所以比前三种方法慢。
- 代码稍长:对于简单转换来说有些“杀鸡用牛刀”。
代码示例:
int number = 101;
String str4 = String.format("%d", number); // %d 是 int 的格式说明符
System.out.println(str4); // 输出: 101
// 更复杂的格式化示例
String formattedStr = String.format("编号: %05d", number); // 将数字格式化为5位,不足补0
System.out.println(formattedStr); // 输出: 编号: 00101
使用 Integer 的构造函数
这种方式不推荐用于简单的类型转换,因为它的主要目的是创建一个新的 Integer 对象,而不是字符串,它确实可以完成转换任务。
特点:
- 不推荐:效率较低,意图不明确。
- 原理:首先创建一个
Integer对象,然后调用该对象的toString()方法。
代码示例:
int number = 202; String str5 = new Integer(number).toString(); System.out.println(str5); // 输出: 202
性能对比与总结
为了直观地比较前三种主要方法的性能,我们可以使用 JMH (Java Microbenchmark Harness) 进行基准测试,以下是一个典型的测试结果(相对性能,数值越小越快):
| 方法 | 相对性能 | 推荐度 | 备注 |
|---|---|---|---|
String.valueOf(int) |
最快 | ⭐⭐⭐⭐⭐ | 首选,简洁、高效、安全。 |
Integer.toString(int) |
与 valueOf 几乎相同 |
⭐⭐⭐⭐⭐ | 首选,同样简洁、高效。 |
"" + int |
稍慢(约 5-10%) | ⭐⭐⭐ | 简洁,但性能略逊,且可能不符合某些代码规范。 |
String.format("%d", ...) |
慢很多(约 10-100 倍) | ⭐ | 适用于复杂的字符串格式化,不适用于简单转换。 |
new Integer(i).toString() |
慢很多(约 100 倍) | ⭐ | 不推荐,会产生不必要的对象创建。 |
结论与最佳实践
在日常开发中,你应该优先选择以下两种方法:
String.valueOf(int):这是最通用、最安全的选择,代码清晰易懂,性能也无可挑剔。Integer.toString(int):同样是一个非常优秀的选择,性能与String.valueOf()并驾齐驱,意图明确。
选择建议:
- 如果你只是想把一个
int变成String,用String.valueOf()或Integer.toString()都可以,它们都是最佳实践。 - 如果你需要在转换的同时进行复杂的格式化(保留两位小数、设置固定宽度等),那么请使用
String.format()。 - 避免使用
new Integer(i).toString()和"" + i来进行转换,前者效率低且不必要,后者虽然流行但在性能和代码风格上存在争议。
