核心一句话:
Integer.toString()
是将int
值或Integer
对象转换为字符串的标准方法,支持十进制和指定进制转换,是字符串与整数互转中最常用的方法之一。
一、方法定义(两种重载形式)
✅ 1. public static String toString(int i)
- 功能:将
int
基本类型转换为十进制字符串。 - 参数:
i
— 要转换的整数。 - 返回值:表示该整数的十进制字符串。
- 异常:无。
✅ 2. public static String toString(int i, int radix)
- 功能:将
int
值按指定进制(radix)转换为字符串。 - 参数:
i
:要转换的整数。radix
:进制基数(2 ≤ radix ≤ 36)。
- 返回值:指定进制下的字符串表示。
- 异常:如果
radix < 2
或radix > 36
,返回十进制字符串(不会抛异常,但行为可能不符合预期)。
二、功能说明
功能 | 说明 |
---|---|
基础转换 | 将 int 转为 String ,如 123 → "123" |
进制支持 | 支持 2~36 进制转换(如二进制、八进制、十六进制) |
负数处理 | 自动添加负号 - ,如 -100 → "-100" |
静态方法 | 无需创建对象,直接调用 |
三、示例代码
✅ 示例 1:基本用法(十进制)
int num = 456;
String str = Integer.toString(num);
System.out.println(str); // 输出:"456"
✅ 示例 2:负数转换
int negative = -100;
String str = Integer.toString(negative);
System.out.println(str); // 输出:"-100"
✅ 示例 3:指定进制转换
int num = 255;
// 二进制
System.out.println(Integer.toString(num, 2)); // "11111111"
// 八进制
System.out.println(Integer.toString(num, 8)); // "377"
// 十六进制
System.out.println(Integer.toString(num, 16)); // "ff"
// 三十六进制(最大支持)
System.out.println(Integer.toString(1000, 36)); // "rs"
✅ 示例 4:进制边界测试
System.out.println(Integer.toString(10, 1)); // "10"(radix无效,返回十进制)
System.out.println(Integer.toString(10, 37)); // "10"(同上)
⚠️ 注意:
radix
超出 [2,36] 范围时,不会抛异常,但会默认使用十进制。
四、使用技巧
🔧 技巧 1:快速转十六进制(替代 toHexString
)
int color = 255;
String hex = Integer.toString(color, 16).toUpperCase(); // "FF"
🔧 技巧 2:补零格式化(结合 String.format
)
int num = 7;
String padded = String.format("%04d", num); // "0007"
// 或使用 toString + 补零逻辑
🔧 技巧 3:用于日志、拼接、JSON 序列化前的准备
String log = "User ID: " + Integer.toString(userId);
🔧 技巧 4:与 parseInt
配合实现进制转换工具
// 二进制字符串转十六进制
String bin = "1101";
String hex = Integer.toString(Integer.parseInt(bin, 2), 16); // "d"
五、常见错误
❌ 错误 1:误以为 radix
越界会抛异常
String result = Integer.toString(100, 1); // 不会报错,返回 "100"
✅ 正确做法:手动校验
radix
范围:
if (radix < 2 || radix > 36) {
throw new IllegalArgumentException("Radix must be between 2 and 36");
}
❌ 错误 2:混淆 toString(int)
与 toString()
实例方法
Integer num = 100;
String s1 = num.toString(); // 实例方法
String s2 = Integer.toString(num); // 静态方法,推荐
String s3 = Integer.toString(100); // 直接传 int
✅ 建议:优先使用静态方法,避免装箱。
六、注意事项
注意点 | 说明 |
---|---|
✅ 线程安全 | 静态方法,无状态,线程安全 |
⚠️ null 处理 | Integer.toString(null) 会编译报错(参数是 int ),不会出现 NullPointerException |
⚠️ 性能 | 极快,但高频调用建议缓存结果 |
⚠️ 进制字符集 | 1035 使用 az(小写),如 35 → "z" |
⚠️ 自动装箱避免 | 不要写 Integer.toString(new Integer(100)) ,直接 Integer.toString(100) |
七、最佳实践
✅ 1. 优先使用 Integer.toString(int)
而非字符串拼接
// ❌ 低效(触发 StringBuilder)
String s = "" + 123;
// ✅ 推荐
String s = Integer.toString(123);
✅ 2. 在日志、配置、序列化中统一使用此方法
logger.info("Count: " + Integer.toString(count));
✅ 3. 进制转换时明确 radix
合法性
public static String toBase(int num, int base) {
if (base < 2 || base > 36) {
throw new IllegalArgumentException("Base must be 2-36");
}
return Integer.toString(num, base);
}
✅ 4. 避免重复调用(性能敏感场景)
// ❌ 多次调用
for (int i = 0; i < 1000; i++) {
System.out.println(Integer.toString(value));
}
// ✅ 缓存结果
String strValue = Integer.toString(value);
for (int i = 0; i < 1000; i++) {
System.out.println(strValue);
}
八、性能优化建议
场景 | 建议 |
---|---|
单次转换 | Integer.toString() 性能极佳 |
高频调用 | 缓存结果,避免重复转换 |
大量数字 | 考虑使用 StringBuilder 批量处理 |
固定格式 | 使用 String.format() 或 DecimalFormat |
替代方案 | 对于小整数(-3 ~ 10),JVM 可能缓存字符串,但无需特别优化 |
💡
Integer.toString()
内部使用高效的数字转字符串算法,通常无需手动优化。
九、源码简析(JDK 8+)
public static String toString(int i) {
if (i == Integer.MIN_VALUE)
return "-2147483648";
int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i);
char[] buf = new char[size];
getChars(i, size, buf);
return new String(buf, true);
}
- 使用字符数组预分配,避免频繁扩容。
- 特殊处理
MIN_VALUE
(避免取反溢出)。 - 高效的
getChars()
方法逐位生成字符。
十、与其他方法对比
方法 | 说明 | 推荐场景 |
---|---|---|
Integer.toString(i) |
静态方法,高效 | ✅ 推荐,通用转换 |
String.valueOf(i) |
内部调用 Integer.toString(i) |
可用,语义更广 |
"" + i |
字符串拼接,触发 StringBuilder | ❌ 不推荐,性能差 |
new Integer(i).toString() |
创建对象,再调用实例方法 | ❌ 已废弃,避免使用 |
✅ 结论:
Integer.toString(i)
是最直接、最高效的选择。
十一、总结:快速掌握要点 ✅
项目 | 内容 |
---|---|
核心作用 | 将 int 转为 String |
主要重载 | toString(int) 和 toString(int, radix) |
进制支持 | 2 ~ 36 进制(如二进制、十六进制) |
是否安全 | 线程安全,无异常(radix 越界不报错) |
性能 | 极高,推荐用于高频转换 |
null 处理 | 参数为 int ,不存在 null 问题 |
最佳实践 | 避免装箱、缓存结果、校验 radix |
替代方法 | String.valueOf(i) 可用,""+i 避免 |
🎯 一句话总结:
Integer.toString()
是将整数转为字符串的首选方法,高效、安全、支持多进制,适用于几乎所有整数转字符串场景,使用时注意进制范围校验即可。