最推荐的方法
- 首选:
String.valueOf(int)- 优点:代码简洁、可读性高、性能优秀,这是Java官方推荐的、最直接的方式。
- 次选(性能与首选几乎无差别):
Integer.toString(int)- 优点:同样是官方方法,性能极佳,非常明确地表达了转换意图。
使用 String.valueOf() (最推荐)
这是最常用和最简洁的方法。String.valueOf() 是一个静态重载方法,可以接受所有基本数据类型(如 int, double, boolean)以及 Object,并将其转换为字符串。

代码示例:
int number = 123; String str1 = String.valueOf(number); System.out.println(str1); // 输出: 123 System.out.println(str1.getClass().getName()); // 输出: java.lang.String // 处理负数 int negativeNumber = -456; String str2 = String.valueOf(negativeNumber); System.out.println(str2); // 输出: -456 // 处理0 int zero = 0; String str3 = String.valueOf(zero); System.out.println(str3); // 输出: 0
为什么推荐?
- 简洁:代码一行搞定,非常直观。
- 安全:如果传入的
int是null(虽然基本类型int不可能为null,但如果是Integer对象,String.valueOf(null)会返回字符串"null",而toString()会抛出NullPointerException)。 - 性能:JVM 对此方法有很好的优化,性能非常高。
使用 Integer.toString() (性能优秀)
Integer 类是 int 的包装类,它提供了一个静态方法 toString(),专门用于将 int 转换为 String。
代码示例:

int number = 789; String str = Integer.toString(number); System.out.println(str); // 输出: 789 System.out.println(str.getClass().getName()); // 输出: java.lang.String
为什么也很好?
- 性能:从底层实现来看,
String.valueOf(int)内部就是调用了Integer.toString(int),所以它们的性能几乎完全一样。 - 意图明确:代码非常清楚地表明你正在将一个整数转换为字符串。
与 String.valueOf() 的细微差别:
对于基本类型 int,两者几乎没有区别,但对于 Integer 对象,String.valueOf(obj) 更安全,因为它能正确处理 null。
使用空字符串连接 (不推荐,但常见)
这是一种非常“取巧”的方法,通过将 int 与一个空字符串 进行连接,利用Java的自动类型转换机制来得到 String。
代码示例:

int number = 101; String str = "" + number; System.out.println(str); // 输出: 101
为什么不推荐?
- 性能稍差:这种操作实际上会创建一个临时的
StringBuilder对象,执行append()操作,最后再调用toString(),虽然现代JVM对此优化得很好,性能损失微乎其微,但在理论上不如前两种方法直接。 - 可读性稍差:对于不熟悉这个技巧的人来说,
"" + number的意图不如String.valueOf(number)那么清晰。 - 可能引发
NullPointerException:number是一个可能为null的Integer对象,"" + number会导致NullPointerException,而String.valueOf(number)会输出字符串"null"。
使用 String.format() (格式化输出)
如果你不仅需要转换,还需要对格式进行控制(指定宽度、补零等),String.format() 是一个非常强大的工具。
代码示例:
int number = 99;
// 简单转换
String str1 = String.format("%d", number);
System.out.println(str1); // 输出: 99
// 格式化为5位,前面补零
String str2 = String.format("%05d", number);
System.out.println(str2); // 输出: 00099
// 格式化为8位,右对齐,前面补空格
String str3 = String.format("%8d", number);
System.out.println("[" + str3 + "]"); // 输出: [ 99]
优点:
- 功能强大:可以轻松实现复杂的格式化需求。
- 国际化友好:
String.format()遵循Locale设置,适合多语言环境。
缺点:
- “杀鸡用牛刀”:如果只是简单地转换,使用
format()会显得有些笨重和过度设计。 - 性能开销:比前几种方法要慢,因为它需要解析格式化字符串。
使用 Integer 的构造函数 (已过时)
在Java 9之前,可以使用 new Integer(int).toString() 的方式。这种方式在Java 9中被标记为过时(deprecated),并且自Java 9起,Integer 的构造函数不再缓存实例,直接使用构造函数来获取字符串是低效的。
代码示例 (不推荐使用):
// 过时的方法,不推荐! int number = 202; String str = new Integer(number).toString(); System.out.println(str); // 输出: 202
为什么不推荐?
- 性能低:创建了一个不必要的
Integer对象,然后再调用其方法,开销比直接调用静态方法大得多。 - 已过时:官方文档明确指出不推荐使用。
性能对比与最佳实践
| 方法 | 示例 | 可读性 | 性能 | 推荐度 |
|---|---|---|---|---|
String.valueOf() |
String.valueOf(i) |
⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ (首选) |
Integer.toString() |
Integer.toString(i) |
⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ (次选) |
| 空字符串连接 | "" + i |
⭐⭐ | ⭐⭐⭐⭐ | ⭐ (不推荐) |
String.format() |
String.format("%d", i) |
⭐⭐⭐ (格式化时) | ⭐⭐ | ⭐⭐ (仅用于格式化) |
new Integer() |
new Integer(i).toString() |
⭐⭐ | ⭐ | ⭐ (已过时,禁用) |
在Java中将 int 转换为 String:
- 日常开发:请毫不犹豫地选择
String.valueOf(int),它简洁、安全、高效,是最佳实践。 - 追求极致明确:使用
Integer.toString(int),效果与首选方法几乎一样,意图表达更清晰。 - 需要格式化:当你需要补零、设置宽度等复杂格式时,再使用
String.format()。 - 避免使用:尽量避免使用空字符串连接和
Integer的构造函数。
