Integer.parseUnsignedInt是Java 8引入的解析无符号十进制字符串为int的方法,支持0–4294967295范围,返回值为补码表示的int,需用long掩码(& 0xFFFFFFFFL)还原无符号语义。

Integer.parseUnsignedInt 是 Java 8 引入的工具方法,用于将字符串按**无符号十进制整数**解析为 int 类型值。它不把输入当作带符号的 32 位整数(即不考虑最高位是符号位),而是把整个 32 位都看作数值位,因此能正确处理 2147483648 到 4294967295 这段原本“溢出”的正数。
它和 Integer.parseInt 的关键区别
普通 parseInt 把字符串转成有符号 int,遇到超过 Integer.MAX_VALUE(2147483647)的数会直接抛 NumberFormatException;而 parseUnsignedInt 允许输入最大到 4294967295(即 2³²−1),并返回对应无符号值的补码表示(仍是 int 类型,但语义上代表无符号数)。
- 例如:
Integer.parseUnsignedInt("4294967295")返回-1(因为 4294967295 的二进制全为 1,在有符号 int 中就是 −1) - 再如:
Integer.parseUnsignedInt("2147483648")返回-2147483648(即Integer.MIN_VALUE)
支持的进制(radix)参数
该方法重载了两个版本:
-
parseUnsignedInt(String s):默认按十进制解析(radix = 10) -
parseUnsignedInt(String s, int radix):可指定进制,支持 2–36(和 parseInt 一样)
比如:Integer.parseUnsignedInt("FFFFFFFF", 16) 返回 -1(十六进制 FFFFFFFF 对应无符号 4294967295,存为 int 就是 −1)
立即学习“Java免费学习笔记(深入)”;
常见使用场景与注意事项
主要用于需要处理「本应是无符号但 Java 没原生类型」的场景,比如网络协议、底层数据解析、哈希值、IPv4 地址转整数等。
- 输入不能含前导空格或正负号(
"-123"或" +456"都会抛异常) - 空字符串、
null、含非法字符(如字母超出当前进制范围)都会抛NumberFormatException - 结果仍是
int,只是解释方式不同;如需真正的大于Integer.MAX_VALUE的值,应改用Long.parseUnsignedInt或BigInteger
怎么安全地获取无符号语义的数值?
如果想把解析结果当「真正的无符号数」用(比如做比较、打印、计算),别直接用返回的 int 值,而应转成 long 并屏蔽高位:
long v = Integer.parseUnsignedInt(s) & 0xFFFFFFFFL;- 这样
v就是 0 到 4294967295 范围内的正 long 值,可安全参与运算和输出
例如:System.out.println(Integer.parseUnsignedInt("4294967295") & 0xFFFFFFFFL); 输出 4294967295


















