哪种方法最好?
| 方法 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
String.valueOf(int i) |
最推荐,代码清晰,性能好,可读性高。 | 无明显缺点。 | ⭐⭐⭐⭐⭐ |
Integer.toString(int i) |
非常推荐,性能最好,是 valueOf 的内部实现。 |
代码比 valueOf 稍长一点。 |
⭐⭐⭐⭐⭐ |
"" + int |
简单直观,适合快速编码。 | 性能稍差(会创建不必要的 StringBuilder 对象),可读性有争议。 |
⭐⭐⭐ |
String.format() |
功能强大,适合格式化输出。 | 代码冗长,性能稍差,不适合简单的类型转换。 | ⭐⭐ |
使用 String.valueOf() (最推荐)
这是最常用、最清晰、最安全的方法。String.valueOf() 是一个静态方法,它可以将各种基本数据类型(包括 int)和对象转换为字符串。

语法:
String str = String.valueOf(int变量);
示例代码:
int number = 123; String strNumber = String.valueOf(number); System.out.println(strNumber); // 输出: 123 System.out.println(strNumber.getClass().getName()); // 输出: java.lang.String
优点:
- 代码清晰:一眼就能看出意图是将一个值转换为字符串。
- 性能良好:JVM 对此方法有很好的优化。
- 可读性高:是许多 Java 开发者首选的方式。
使用 Integer.toString() (性能最佳)
Integer 是 int 的包装类,它提供了一个静态的 toString() 方法,专门用于将 int 转换为 String。String.valueOf(int i) 的内部实现就是调用了 Integer.toString(i)。

语法:
String str = Integer.toString(int变量);
示例代码:
int number = 456; String strNumber = Integer.toString(number); System.out.println(strNumber); // 输出: 456
优点:
- 性能最高:这是最直接、最高效的转换方式,因为它避免了额外的函数调用层次(虽然
valueOf的差别微乎其微)。 - 意图明确:直接表明你正在处理
Integer类型的转换。
缺点:

- 相比
String.valueOf(),代码多写了Integer.,对于追求简洁的人来说可能略显冗余,但在性能敏感的场景下,这是首选。
使用空字符串连接 "" + int (简单但不推荐)
这是一种非常简洁的“技巧”,通过将 int 与一个空字符串 进行连接,利用 Java 的自动类型转换机制来得到一个 String。
语法:
String str = "" + int变量;
示例代码:
int number = 789; String strNumber = "" + number; System.out.println(strNumber); // 输出: 789
底层原理:
当你写 "" + number 时,Java 编译器会将其优化为:
new StringBuilder().append("").append(number).toString();
这会创建一个 StringBuilder 对象,然后进行两次 append 操作,最后调用 toString()。
优点:
- 书写简单:代码最短。
缺点:
- 性能稍差:每次转换都会创建一个临时的
StringBuilder对象,对于简单的转换来说,这带来了不必要的开销,在循环中大量使用会显著影响性能。 - 可读性有争议:一些开发者认为这种方式不够“正式”,可能会让代码意图变得模糊。
使用 String.format() (功能强大)
String.format() 方法功能非常强大,它使用格式化字符串来生成新的字符串,虽然它也可以用来做类型转换,但通常用于更复杂的格式化需求。
语法:
String str = String.format("%d", int变量);
%d 是 int 类型的格式说明符。
示例代码:
int number = 1011;
String strNumber = String.format("%d", number);
System.out.println(strNumber); // 输出: 1011
优点:
- 功能强大:可以轻松地控制数字的格式,比如补零、千位分隔符等。
int num = 99; // 补零,总宽度为5 String formattedStr = String.format("%05d", num); System.out.println(formattedStr); // 输出: 00099
缺点:
- 代码冗长:对于简单的类型转换,使用
format有些杀鸡用牛刀。 - 性能较差:解析格式化字符串比直接转换要慢。
特殊情况:处理 null 值
如果你有一个可能为 null 的 Integer 对象,直接调用其 .toString() 方法会抛出 NullPointerException。
Integer numberObject = null; // 下面的代码会抛出 NullPointerException // String str = numberObject.toString();
这时,String.valueOf() 就体现了它的优势,因为它能正确处理 null。
Integer numberObject = null; String str = String.valueOf(numberObject); // 返回字符串 "null",而不是抛出异常 System.out.println(str); // 输出: null
- 日常开发:优先使用
String.valueOf(),它在可读性、安全性和性能之间取得了最好的平衡。 - 性能关键代码:如果你对性能有极致追求(例如在非常频繁调用的循环或算法中),可以使用
Integer.toString(),因为它是最快的。 - 快速编码/脚本:在非正式或临时的代码中,可以使用
"" + int,但要了解其性能代价。 - 格式化需求:当需要对数字进行格式化(如补零、指定宽度等)时,使用
String.format()。
对于绝大多数情况,String.valueOf() 是你的最佳选择。
