方法定义
public static String toHexString(int i)
- 修饰符:
public static
- 参数:
int i
- 要转换的整数值 - 返回值:十六进制字符串(小写字母,无前缀)
- 功能:将整数转换为十六进制字符串表示
核心功能说明
特性 | 说明 |
---|---|
进制转换 | 将十进制整数转为十六进制字符串 |
字母大小写 | 始终使用小写字母(a-f) |
负数处理 | 使用二进制补码形式表示(8字符) |
无前缀 | 不包含 "0x" 或其他前缀 |
零值处理 | 输入0返回 "0"(非空字符串) |
详细示例代码
基础转换
System.out.println(Integer.toHexString(10)); // "a"
System.out.println(Integer.toHexString(255)); // "ff"
System.out.println(Integer.toHexString(0)); // "0"
负数转换
System.out.println(Integer.toHexString(-1)); // "ffffffff"
System.out.println(Integer.toHexString(-16)); // "fffffff0"
System.out.println(Integer.toHexString(Integer.MIN_VALUE)); // "80000000"
边界值测试
System.out.println(Integer.toHexString(15)); // "f"(单字符)
System.out.println(Integer.toHexString(16)); // "10"(进位)
System.out.println(Integer.toHexString(0xDEADBEEF)); // "deadbeef"
使用技巧
颜色值处理
// RGB 颜色转十六进制 int rgb = (255 << 16) | (128 << 8) | 64; // 橙色 String hexColor = "#" + Integer.toHexString(rgb).substring(2); System.out.println(hexColor); // "#ff8040"
固定长度格式化
// 8位定长十六进制(补前导零) String fixedHex = String.format("%8s", Integer.toHexString(value)) .replace(' ', '0');
内存地址显示
// 对象内存地址(配合hashCode) Object obj = new Object(); String address = "0x" + Integer.toHexString(System.identityHashCode(obj));
常见错误与规避
前导零缺失
// 错误:期望得到 "0000000a" 实际得到 "a" String hex = Integer.toHexString(10); // 正确:使用格式化 String padded = String.format("%08x", 10); // "0000000a"
大小写混淆
// 错误:尝试直接获取大写 String hex = Integer.toHexString(255); // "ff" // 正确:转换大小写 String upperHex = hex.toUpperCase(); // "FF"
负数误解
// 错误:期望得到 -10 的十进制表示 String hex = Integer.toHexString(-10); // "fffffff6" // 正确:理解这是补码表示 int decoded = (int)Long.parseLong(hex, 16); // 转换回 -10
注意事项
字母大小写规则
- 始终输出小写字母(a-f)
- 如需大写需额外调用
toUpperCase()
输出长度变化
- 长度范围:1-8个字符
- 无前导零压缩(0返回"0"而非"")
数值范围
- 处理全int范围(-2147483648 ~ 2147483647)
- 超大值不科学计数法:
Integer.toHexString(Integer.MAX_VALUE)
→ "7fffffff"
线程安全
- 静态方法,无状态,线程安全
最佳实践与性能优化
批量转换优化
// 低效:重复调用 for (int num : numbers) { String hex = Integer.toHexString(num); } // 高效:预分配StringBuilder StringBuilder sb = new StringBuilder(numbers.length * 8); for (int num : numbers) { sb.append(Integer.toHexString(num)).append(" "); }
替代方案选择 | 场景 | 推荐方法 | 优势 | |---------------------|----------------------------------|--------------------------| | 需要前缀 |
"0x" + Integer.toHexString()
| 简单直观 | | 固定长度/大写 |String.format("%08X", value)
| 单次调用完成格式化 | | 超大数处理 |Long.toHexString((long)value & 0xFFFFFFFFL)
| 正确处理32位无符号数 |避免冗余转换
// 错误:不必要的类型转换 Integer numObj = 255; String hex = Integer.toHexString(numObj.intValue()); // 正确:直接使用int值 String hex = Integer.toHexString(255);
关键总结
场景 | 推荐方案 | 示例 |
---|---|---|
基本转换 | 直接使用 toHexString() |
Integer.toHexString(255) → "ff" |
需要前缀 | 手动添加 "0x" | "0x" + Integer.toHexString(10) |
固定长度/大写 | 使用 String.format() |
String.format("%08X", 10) → "0000000A" |
无符号32位值处理 | 结合 Long.toHexString() |
Long.toHexString(value & 0xFFFFFFFFL) |
颜色值处理 | 取子串+前缀 | "#" + hex.substring(2) |
批量转换 | 使用 StringBuilder 预分配 |
见上方优化示例 |