TL;DR)
| 方法 | 代码示例 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|---|
String.valueOf() |
String str = String.valueOf(i); |
最推荐,简洁、高效,能处理 null。 |
无明显缺点。 | ⭐⭐⭐⭐⭐ |
Integer.toString() |
String str = Integer.toString(i); |
非常推荐,语义清晰,性能高。 | 不能直接用于 Integer 对象的 null 值。 |
⭐⭐⭐⭐⭐ |
| 字符串拼接 | String str = i + ""; |
简单直观,适合快速编码。 | 性能稍差,会创建不必要的 StringBuilder 对象。 |
⭐⭐⭐ |
String.format() |
String str = String.format("%d", i); |
功能强大,适合格式化输出。 | 相对啰嗦,仅用于转换时有点“杀鸡用牛刀”。 | ⭐⭐ |
方法详解
String.valueOf(int i) - 最推荐
这是最常用、最安全的方法,它是一个静态方法,可以直接将基本数据类型 int 转换为 String。

代码示例:
int number = 123; String str = String.valueOf(number); System.out.println(str); // 输出: 123 System.out.println(str.getClass().getName()); // 输出: java.lang.String
优点:
- 简洁高效:代码非常清晰,并且是专门为此目的设计的,性能很好。
- 重载方法:
String.valueOf()有多个重载版本,可以接受所有基本数据类型(int,double,boolean等)和Object类型,这使得它在处理可能为null的Integer对象时也非常安全。Integer numberObj = null; // String str = numberObj.toString(); // 这里会抛出 NullPointerException String safeStr = String.valueOf(numberObj); // 安全,输出 "null" 字符串 System.out.println(safeStr); // 输出: null
在绝大多数情况下,这是你的首选。
Integer.toString(int i) - 非常推荐
这是 Integer 类中的一个静态方法,功能与 String.valueOf(int) 几乎完全相同,也是将 int 转换为 String 的标准方式。

代码示例:
int number = 456; String str = Integer.toString(number); System.out.println(str); // 输出: 456
优点:
- 语义清晰:
Integer.toString()的名字清楚地表达了“将整数转换为字符串”的意图。 - 性能优秀:和
String.valueOf()一样,性能非常高。
与 String.valueOf() 的细微差别:
String.valueOf(int i)内部就是调用了Integer.toString(i),所以它们在底层实现上是等价的。String.valueOf()的重载版本更多,通用性更强,当你不确定变量类型或者处理可能为null的包装类对象时,String.valueOf()更方便。
同样是绝佳选择,可以和 String.valueOf() 互换使用。

使用 运算符(字符串拼接)
这是最直观、最“新手友好”的方法,当 int 与一个空字符串 相加时,Java 会自动将 int 隐式转换为 String。
代码示例:
int number = 789; String str = number + ""; System.out.println(str); // 输出: 789
优点:
- 极其简单:对于一次性的、简单的转换,代码非常短。
缺点:
- 性能稍差:在底层,Java 编译器会为你创建一个
StringBuilder对象来处理这个拼接操作,虽然对于单个转换来说性能差异可以忽略不计,但在循环中进行大量拼接时,性能会明显下降。// 编译器实际生成的代码类似这样: String str = new StringBuilder().append(number).append("").toString(); - 可读性稍差:在一些复杂的表达式中,过多使用 进行拼接可能会降低代码的可读性。
适合在简单脚本或非性能关键路径的代码中使用,不推荐在需要高性能的循环或复杂逻辑中使用。
String.format() - 功能强大
String.format() 方法使用格式化字符串来创建新的 String,它不仅可以用来转换,还可以进行格式化,比如控制小数位数、补零等。
代码示例:
int number = 100;
String str = String.format("%d", number);
System.out.println(str); // 输出: 100
优点:
- 功能强大:如果转换的同时需要进行格式化,这是最佳选择。
int num = 5; // 格式化为固定位数,不足补零 String formattedStr = String.format("%05d", num); // 输出: 00005 System.out.println(formattedStr);
缺点:
- 略显啰嗦:如果仅仅是做一个简单的类型转换,使用
String.format()有些小题大做,代码不如前几种方法简洁。
当你需要格式化输出时,这才是正确的工具,如果只是简单的类型转换,则不推荐。
性能对比
如果你对性能有极致追求,这里有一个简单的性能排序(从快到慢):
Integer.toString(int)≈String.valueOf(int)(两者性能几乎一样,都是最快的)- 字符串拼接 (比前两者稍慢,因为涉及
StringBuilder的创建和销毁)
在现代 JVM 中,这种性能差异通常只有在循环数百万次时才会变得明显,对于 99% 的应用场景,选择前两种方法中的任何一种都足够了。
- 首选
String.valueOf(int):因为它最通用、最安全,能处理null,并且性能极佳。 - 次选
Integer.toString(int):如果你明确知道你处理的是一个原始int类型,并且喜欢更明确的语义,这也是一个完美的选择。 - 避免在性能关键代码中使用 拼接:虽然简单,但在循环或高频代码中应避免。
- 仅在需要格式化时使用
String.format():它是格式化输出的利器,但不是简单的类型转换工具。
