String d="0xD437D437";
System.out.println(Integer.decode(d));
你的数字太大了,不适合整数类型-十六进制中的0x7FFFFFFF
是最大的数字(2147483647 = 2^31-1)。如果您想使用这个字符串作为一个数字,使用Long.decode(d)
将其作为Long。
String d = "0x7FFFFFFF";
String e = "0x80000000";
String f = "0xD437D437";
System.out.println(Integer.decode(d));
System.out.println(Long.decode(e));
System.out.println(Long.decode(f));
将打印
2147483647
2147483648
3560428599
文档状态
该字符序列必须表示一个正值,否则将抛出NumberFormatException。
而0xD437D437
为负值,即-734538697
,由Integer.toHexString(-734538697)
产生"d437d437"
可见。
因此,将其解析为Long
,如@Bonniu所说,如果您正在寻找正值,或者如果您实际上试图解析负整型,则可以将结果Long
转换回Integer
/int
:
Long.decode("0xD437D437").intValue() // -734538697