Java 中 Integer
转 String
的 7 种方法详解
一、方法概览
方法 | 是否推荐 | 适用场景 | 性能 |
---|---|---|---|
String.valueOf() |
✅ 强烈推荐 | 通用首选 | ⭐⭐⭐⭐⭐ |
Integer.toString() |
✅ 推荐 | 整数专用 | ⭐⭐⭐⭐⭐ |
直接拼接 + "" |
⚠️ 谨慎使用 | 简单调试 | ⭐⭐ |
"" + integer |
⚠️ 谨慎使用 | 同上 | ⭐⭐ |
String.format() |
✅ 推荐 | 格式化输出 | ⭐⭐⭐ |
StringBuilder.append() |
✅ 推荐 | 拼接场景 | ⭐⭐⭐⭐ |
DecimalFormat |
✅ 推荐 | 格式化(如千分位) | ⭐⭐⭐ |
二、详细方法说明与示例
1. String.valueOf(Integer)
—— 推荐首选
Integer num = 123;
String str = String.valueOf(num);
System.out.println(str); // 输出:123
✅ 优点:
- 支持
null
安全:String.valueOf(null)
返回"null"
字符串 - 通用性强,可用于所有对象类型
- 内部调用
Integer.toString()
❌ 注意:
Integer nullInt = null;
String s = String.valueOf(nullInt); // 返回字符串 "null",不是 null
📌 适合大多数场景,推荐作为默认选择。
2. Integer.toString()
—— 整数专用推荐
Integer num = 456;
String str = Integer.toString(num);
System.out.println(str); // 输出:456
✅ 优点:
- 专为整数设计,语义清晰
- 性能与
String.valueOf()
相当 - 支持指定进制:
Integer.toString(num, 16)
→ 十六进制
📌 进制转换示例:
System.out.println(Integer.toString(255, 16)); // "ff"
System.out.println(Integer.toString(8, 8)); // "10"
System.out.println(Integer.toString(10, 2)); // "1010"
✅ 适用于需要格式化进制输出的场景。
3. + ""
拼接法 —— 不推荐用于生产
Integer num = 789;
String str = num + "";
System.out.println(str); // 输出:789
⚠️ 问题:
- 底层使用
StringBuilder
,小量使用无妨 - 大量循环中性能较差
- 代码不够清晰
❌ 反例(性能差):
// 避免在循环中这样写
for (int i = 0; i < 1000; i++) {
String s = i + ""; // 每次创建 StringBuilder
}
📝 仅建议用于调试或简单脚本。
4. "" + integer
—— 同上,不推荐
String str = "" + 123; // 等价于 123 + ""
与 + ""
性能和机制相同,不推荐作为主要方法。
5. String.format()
—— 格式化输出推荐
Integer num = 1000;
String str = String.format("%d", num);
System.out.println(str); // 输出:1000
✅ 优点:
- 支持格式化(如补零、宽度控制)
- 可读性强
📌 格式化示例:
System.out.println(String.format("%05d", 42)); // "00042"(补零到5位)
System.out.println(String.format("%,d", 1000000)); // "1,000,000"(千分位)
✅ 适合需要格式化输出的场景,如日志、报表。
6. StringBuilder.append()
—— 拼接场景推荐
Integer num = 123;
StringBuilder sb = new StringBuilder();
sb.append(num);
String str = sb.toString();
✅ 优点:
- 在字符串拼接场景中性能最优
- 可链式调用
📌 拼接示例:
Integer age = 25;
String name = "Alice";
String result = new StringBuilder()
.append("Name: ").append(name)
.append(", Age: ").append(age)
.toString();
✅ 适用于多字段拼接场景。
7. DecimalFormat
—— 复杂格式化推荐
import java.text.DecimalFormat;
Integer num = 1234567;
DecimalFormat df = new DecimalFormat("#,###");
String str = df.format(num);
System.out.println(str); // 输出:1,234,567
✅ 优点:
- 支持复杂数字格式(货币、百分比等)
- 国际化支持好
📌 更多格式:
DecimalFormat df1 = new DecimalFormat("00000"); // 补零
DecimalFormat df2 = new DecimalFormat("$#,##0.00"); // 货币
✅ 适合金融、报表等需要复杂格式化的场景。
三、性能对比(从高到低)
方法 | 性能等级 | 说明 |
---|---|---|
String.valueOf() / Integer.toString() |
⭐⭐⭐⭐⭐ | 最快,直接调用 |
StringBuilder.append() |
⭐⭐⭐⭐ | 拼接场景最优 |
String.format() |
⭐⭐⭐ | 格式化有开销 |
DecimalFormat |
⭐⭐⭐ | 灵活但稍慢 |
+ "" / "" + |
⭐⭐ | 隐式创建 StringBuilder |
四、最佳实践总结
✅ 推荐选择策略
场景 | 推荐方法 |
---|---|
通用转换 | String.valueOf(integer) |
整数专用 | Integer.toString(integer) |
格式化输出 | String.format() 或 DecimalFormat |
字符串拼接 | StringBuilder.append() |
进制转换 | Integer.toString(num, radix) |
null 安全处理 | String.valueOf() (返回 "null") |
五、常见错误与注意事项
错误 | 正确做法 |
---|---|
new String(integer) |
❌ 构造函数不接受 Integer |
忽略 null 判断 |
使用 String.valueOf() 安全处理 |
在循环中用 + "" |
改用 StringBuilder |
六、一句话总结
首选
String.valueOf()
,格式化用String.format()
,拼接用StringBuilder
,进制转换用Integer.toString(i, radix)
—— 理解场景,选择最优方法。