为什么parseInt("99", 8)不可以?

我看到JAVA的官方文档里关于int java.lang.Integer.parseInt(String s, int radix) throws NumberFormatException给出的例子:

parseInt("0", 10) returns 0

parseInt("473", 10) returns 473
parseInt("+42", 10) returns 42
parseInt("-0", 10) returns 0
parseInt("-FF", 16) returns -255

parseInt("1100110", 2) returns 102

parseInt("2147483647", 10) returns 2147483647

parseInt("-2147483648", 10) returns -2147483648

parseInt("2147483648", 10) throws a NumberFormatException

parseInt("99", 8) throws a NumberFormatException

parseInt("Kona", 10) throws a NumberFormatException

parseInt("Kona", 27) returns 411787

我不懂为什么parseInt("99", 8) throws a NumberFormatException ?哪个大神可以帮我解释一下?

还有,parseInt("Kona", 10) throws a NumberFormatException的原因,是不是因为10进制里,不像16进制或者27进制那样,存在用字符表示的数字?

因为8进制只能允许01234567这些字符。
16进制允许1234567890abcdef
如果你的进制中不允许这个字符,字符串又有,就报错。

首先要知道:

10进制逢10进1,所以每一位都在区间[0,9]上

8进制逢8进1,所所以每一位都在区间[0,7]上

16进制逢16进1,但是0-9总共10个数字怎么办呢?引入ABCDEF代表10,11,12,13,14,15

同样的,27进制就是引入了A...Q代表10...27

然后回到你的问题:

parseInt("99", 8)8进制中不可能存在数字9,所以报错

同样parseInt("Kona", 10)10进制中也不可能存在字母,所以报错。

parseInt("0" 这是要转的字符串 , 10 表示转的进制) returns 0

你想想一个八进制的数 怎么可能会存在9 他逢8 就进了一位

学习了,parseInt还有这功能