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

时间:2011-08-04 02:00:22

标签: java

他们认为是:

  

可能重复:
  Integer with leading zeroes

但是,如果你检查Integer with leading zeroes那么你会发现问题是在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?

5 个答案:

答案 0 :(得分:43)

0开头的数字被视为octal - 9不是八进制数字(但是(传统上)0-7是)。


十六进制文字以0x开头,例如0xA


直到Java 6,二进制文件没有文字表示法 你必须使用像

这样的东西
int a = Integer.parseInt("1011011", 2);

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


Java 7现在有binary literals

  

在Java SE 7中,也可以使用二进制数系统表示整数类型(byte,short,int和long)。要指定二进制文字,请在数字中添加前缀0b0B

答案 1 :(得分:19)

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

答案 2 :(得分:13)

以数字0开头的整数是八进制(基数为8)的数字。最大的八进制数字是7; 07之后是010(等于小数8!)

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

答案 3 :(得分:8)

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

十六进制数以0x开头,如0xFFFF。

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

答案 4 :(得分:6)

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