我有一个变量类型int,并且我必须指定负数:-2147483648,问题是我试图使用valueOf()方法将其转换为十六进制形式,当我尝试这样做时:
Integer.valueOf(String.valueOf(n),16); n是负数
它抛出了异常java.lang.NumberFormatException:对于输入字符串:-214748....
为什么我会得到这个??
发布于 2015-01-20 23:49:32
请改用Integer.toString(n, 16)获取n的十六进制表示形式。
发布于 2015-01-20 23:53:57
对问题的简短解释。问题是,使用
Integer.valueOf(String.valueOf(n),16);假设-2147483648是一个十六进制形式的整数(您正在解析以16为底的-2147483648 ),并且它比Interger.MIN_VALUE小得多,所以它会导致异常。正如@Jean建议的那样,使用Integer.toString(int i, radix)。
来自文档:
如果发生以下情况之一,将抛出NumberFormatException类型的异常:
字符串表示的INT值不是
发布于 2015-01-21 00:11:18
检查这些约束正是Integer.parseInt(String, int)为您做的事情。如果检查Integer.parseInt(String, int)的源代码,就会注意到这段代码抛出了异常:
if (result < multmin) {
throw NumberFormatException.forInputString(s);
}其中,result是从字符串的开头到结尾的解析过程中的中间结果,multmin是Integer.MAX_VALUE / radix或-Integer.MAX_VALUE / radix。
解析正在进行中,并检测到如果至少还有一个额外的字符要处理,则必须违反其中一个约束。这就是抛出异常的地方:它指示您向此方法提供了一个无法接受的参数。
https://stackoverflow.com/questions/28049512
复制相似问题