Integer.decode()仅支持0x、0X、#前缀的十六进制解析,无前缀按十进制、0开头无前缀按八进制;不支持FF等无前缀十六进制或含空格/非法字符的字符串,溢出或格式错误会抛NumberFormatException。

Integer.decode() 可以自动识别并解析带前缀的十六进制字符串,但需注意它只支持 0x、0X 和 # 三种前缀,不支持纯数字或其它形式(如 0h、hex:)。
支持的十六进制前缀格式
该方法内部会检查字符串开头:
-
"0x"或"0X"→ 按十六进制解析(例如"0xFF"→ 255) -
"#"→ 同样按十六进制解析(例如"#FF"→ 255) - 若无前缀但全为数字,则按十进制处理(例如
"255"→ 255) -
"0"开头且无x/X/#,则按八进制(例如"077"→ 63)
使用示例与注意事项
直接传入合法格式字符串即可,无需预处理:
Integer.decode("0xFF"); // 返回 255
Integer.decode("0X1A"); // 返回 26
Integer.decode("#FF0000"); // 返回 16711680
Integer.decode("255"); // 返回 255(十进制)
Integer.decode("077"); // 返回 63(八进制)
注意:字符串不能含空格、字母大小写混合错误(如 "0xfG" 会抛 NumberFormatException),且必须是有效整数范围(-2³¹ 到 2³¹−1)。
不支持的常见情况
以下输入会抛出异常,需提前处理或换用其他方式:
-
"FF"(无前缀,会被当十进制,而"FF"不是合法十进制) -
"#00FF00L"(含后缀L,decode 不识别长整型标记) -
"0x GG"(含空格) -
"#ff00cc"(小写字母可以,但超出 int 范围如"#FFFFFFFF"会溢出)
替代方案:更灵活的手动解析
如果需要支持更多格式(如去掉 # 后直接解析、忽略大小写、容错空格),可先标准化字符串再调用 Integer.parseInt(..., 16):
String s = "#FF0000".trim().replaceFirst("^0x|^0X|^#", "");
int value = Integer.parseInt(s, 16);
这种方式控制力更强,也便于添加 try-catch 处理异常。










