带有负数的数字类型解析函数异常
Posted
技术标签:
【中文标题】带有负数的数字类型解析函数异常【英文标题】:numeric type parse functions exception with negative numbers 【发布时间】:2020-07-04 19:51:48 【问题描述】:System.out.println(Integer.parseInt("7FFFFFFF", 16)); //this is ok.
System.out.println(Integer.parseInt("FFFFFFFF", 16)); //this throws Exception
System.out.println(Integer.valueOf("FFFFFFFF", 16)); //this throws Exception
当我尝试使用 parseInt 或 valueOf 方法将十六进制数转换为整数类型、负数时,该方法会为负数抛出 NumberFormatException。我在任何地方都找不到答案。
【问题讨论】:
FFFFFFFF 超出了我认为的整数范围。 【参考方案1】:Integer.parseInt("FFFFFFFF", 16)
并不意味着“给我这个十六进制位模式的int
”。它的意思是“将FFFFFFFF
解释为一个数字的base-16 表示,并给我一个代表相同数字的int
”。
这个数字是 正 数字 4294967295,它超出了 int
的范围,因此例外。
【讨论】:
【参考方案2】:Integer.parseInt()
和 Integer.valueOf()
期望负号 (-
) 表示负值。
因此“FFFFFFFF”被解析为大于Integer.MAX_VALUE
的正值。因此例外。
如果要将其解析为负值,请将其解析为long
并转换为int
:
System.out.println((int)Long.parseLong("FFFFFFFF", 16));
打印
-1
【讨论】:
以上是关于带有负数的数字类型解析函数异常的主要内容,如果未能解决你的问题,请参考以下文章