为什么09“太大”的整数?

他们认为这是:

可能重复:
整数与前导零

但是,如果你检查整数与前导零,那么你会发现问题是否问到在jdk7的推出之前,因此它有较低的研究努力。 但是在jdk7中整数有一些变化和增加。 以下是覆盖jdk7的最新答案。

我有一个代码:

class Test{ public static void main(String[] args){ int x=09; System.out.println(x); } } 

在编译时会给出一个错误:整数太大:09

为什么这样做?

再一次,如果我将代码更改为:

 class Test{ public static void main(String[] args){ int x=012; System.out.println(x); } } 

现在输出是10

为什么它给输出10而不是12?

0开头的数字被认为是八进制的 – 而9不是八进制数字(但是(通常)是0-7)。


hex文字以0x ,例如0xA


直到Java 6,二进制没有文字符号,你将不得不使用类似的东西

 int a = Integer.parseInt("1011011", 2); 

第二个参数指定了所需的基数。


Java 7现在有二进制文字 。

在Java SE 7中,整数types(byte,short,int和long)也可以用二进制数表示。 要指定二进制文字,请将前缀0b0B添加到号码中。

以“0”开始的整数文字被视为八进制。 允许的数字是0到7。

以数字0开始的整数是八进制 (基数8)数字。 最大的八进制数是7; 07之后到了010(相当于小数点8!)

012(八进制十二)是010(八进制十,即十进制8)加2或十进制。

09是一个八进制数字文字,但无效的。

hex数字以0x开头,如0xFFFF。

Java中曾经没有二进制文字。 Java 7支持它们,从0b开始,如0b00100001。

以0开头的数字是八进制数字。 http://en.wikipedia.org/wiki/Octal