方法定义

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"

使用技巧

  1. 颜色值处理

    // RGB 颜色转十六进制
    int rgb = (255 << 16) | (128 << 8) | 64; // 橙色
    String hexColor = "#" + Integer.toHexString(rgb).substring(2);
    System.out.println(hexColor); // "#ff8040"
    
  2. 固定长度格式化

    // 8位定长十六进制(补前导零)
    String fixedHex = String.format("%8s", Integer.toHexString(value))
                       .replace(' ', '0');
    
  3. 内存地址显示

    // 对象内存地址(配合hashCode)
    Object obj = new Object();
    String address = "0x" + Integer.toHexString(System.identityHashCode(obj));
    

常见错误与规避

  1. 前导零缺失

    // 错误:期望得到 "0000000a" 实际得到 "a"
    String hex = Integer.toHexString(10);
    
    // 正确:使用格式化
    String padded = String.format("%08x", 10); // "0000000a"
    
  2. 大小写混淆

    // 错误:尝试直接获取大写
    String hex = Integer.toHexString(255); // "ff"
    
    // 正确:转换大小写
    String upperHex = hex.toUpperCase(); // "FF"
    
  3. 负数误解

    // 错误:期望得到 -10 的十进制表示
    String hex = Integer.toHexString(-10); // "fffffff6"
    
    // 正确:理解这是补码表示
    int decoded = (int)Long.parseLong(hex, 16); // 转换回 -10
    

注意事项

  1. 字母大小写规则

    • 始终输出小写字母(a-f)
    • 如需大写需额外调用 toUpperCase()
  2. 输出长度变化

    • 长度范围:1-8个字符
    • 无前导零压缩(0返回"0"而非"")
  3. 数值范围

    • 处理全int范围(-2147483648 ~ 2147483647)
    • 超大值不科学计数法:Integer.toHexString(Integer.MAX_VALUE) → "7fffffff"
  4. 线程安全

    • 静态方法,无状态,线程安全

最佳实践与性能优化

  1. 批量转换优化

    // 低效:重复调用
    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(" ");
    }
    
  2. 替代方案选择 | 场景 | 推荐方法 | 优势 | |---------------------|----------------------------------|--------------------------| | 需要前缀 | "0x" + Integer.toHexString() | 简单直观 | | 固定长度/大写 | String.format("%08X", value) | 单次调用完成格式化 | | 超大数处理 | Long.toHexString((long)value & 0xFFFFFFFFL) | 正确处理32位无符号数 |

  3. 避免冗余转换

    // 错误:不必要的类型转换
    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 预分配 见上方优化示例