在 Java 中,将 int 类型转换为 String 类型有多种方法,以下是几种最常用和推荐的方法,从最推荐到其他可行方法排序。

使用 String.valueOf() (最推荐)
这是最常用、最简洁且性能最好的方法之一。String.valueOf() 是一个静态方法,专门用于将各种基本数据类型转换为字符串。
代码示例:
int number = 123; String str = String.valueOf(number); System.out.println(str); // 输出: 123 System.out.println(str.getClass().getName()); // 输出: java.lang.String
优点:
- 简洁直观:代码一行就能完成转换,可读性高。
- 性能好:
String.valueOf()内部做了高度优化,通常比使用Integer.toString()更快,因为它可以重用一些内部常量。 - 健壮性:如果传入的
int是null(虽然int是基本类型,不可能为null,但如果是Integer对象),它会返回字符串"null",而不会抛出NullPointerException。
使用 Integer.toString() (也很推荐)
这是另一种非常标准和高效的方法。Integer 类是 int 的包装类,它提供了一个 toString() 方法,用于将 int 值转换为字符串。

代码示例:
int number = 456; String str = Integer.toString(number); System.out.println(str); // 输出: 456
优点:
- 语义清晰:代码明确表示你正在将一个整数转换为其字符串表示形式。
- 性能好:与
String.valueOf()性能非常接近,在大多数情况下可以互换使用。
注意:
Integer 类还提供了一个重载方法 Integer.toString(int i, int radix),可以将 int 转换为指定进制(radix)的字符串。
int number = 255; // 转换为16进制字符串 String hexStr = Integer.toString(number, 16); // 输出: ff // 转换为8进制字符串 String octStr = Integer.toString(number, 8); // 输出: 377
使用空字符串连接 (不推荐,但可行)
这是一种非常巧妙的“技巧”,利用 Java 中字符串和任何类型连接时,该类型会自动调用 toString() 方法的特性。

代码示例:
int number = 789; String str = "" + number; System.out.println(str); // 输出: 789
工作原理:
当执行 "" + number 时,Java 编译器会将其内部转换为 new StringBuilder().append("").append(number).toString()。StringBuilder 的 append(int) 方法会高效地完成转换。
缺点:
- 可读性稍差:对于不熟悉这个技巧的人来说,
"" + 123不如String.valueOf(123)直观。 - 性能开销:虽然现代 JVM 对这种操作优化得很好,但它仍然会隐式地创建一个
StringBuilder对象,在性能要求极高的循环中,可能不如前两种方法直接。 - 代码风格:在一些严格的代码规范中,可能不推荐这种写法,因为它不够明确。
使用 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' (前面有6个空格)
优点:
- 功能强大:可以轻松实现复杂的格式化需求。
- 清晰:格式化字符串(如
"%d")清楚地表明了这是一个格式化操作。
缺点:
- 稍显“重量级”:如果只是简单转换,使用
format会比valueOf或toString有一点点额外的开销,因为它需要解析格式化字符串。
总结与对比
| 方法 | 示例代码 | 优点 | 缺点 | 推荐场景 |
|---|---|---|---|---|
String.valueOf() |
String.valueOf(123) |
最推荐,简洁、高效、健壮 | 无明显缺点 | 绝大多数情况下的首选。 |
Integer.toString() |
Integer.toString(123) |
语义清晰,高效 | 无明显缺点 | 与 valueOf 同样推荐,尤其需要指定进制时。 |
| 空字符串连接 | "" + 123 |
简单,一行搞定 | 可读性稍差,有隐式对象创建 | 快速原型或不拘泥于代码风格的场景。不推荐在生产代码中使用。 |
String.format() |
String.format("%d", 123) |
功能强大,可精细控制格式 | 稍显“重量级”,对于简单转换是“杀鸡用牛刀” | 当需要对输出字符串进行格式化(如补零、对齐)时。 |
针对对象 Integer 的情况
如果你有一个 Integer 对象(而不是 int 基本类型),转换方式略有不同,因为对象可能为 null。
Integer numberObj = 123; // 安全的方式:使用 Objects.toString() import java.util.Objects; String str1 = Objects.toString(numberObj, "default"); // 如果numberObj为null,则返回"default" // 或者先判断是否为null String str2 = (numberObj == null) ? "null" : numberObj.toString();
直接调用 numberObj.toString() 在 numberObj 为 null 时会抛出 NullPointerException。
对于 int 到 String 的转换,请优先使用 String.valueOf() 或 Integer.toString(),两者在性能和简洁性上都表现出色,你可以根据个人喜好或团队规范选择其一,只有在需要复杂格式化时,才考虑使用 String.format()。
