为什么09"整数"太大了?

Moh*_*sal 25 java

他们认为是:

可能重复:
带有前导零的整数

但是如果你用前导零检查整数,那么你会发现问题是在jdk7启动之前是否因为研究工作较少而被问到.但是在jdk7中,整数有一些变化和补充.以下是涵盖jdk7的最新答案.

我有一个代码:

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

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

为什么这样做?

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

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

现在输出是10

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

mik*_*iku 43

以...开头的数字0被认为是八进制 - 而9不是八进制数字(但是(传统上)0-7是).


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


直到Java 6,二进制文件没有文字表示法,你必须使用类似的东西

int a = Integer.parseInt("1011011", 2);
Run Code Online (Sandbox Code Playgroud)

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


Java 7现在具有二进制文字.

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

  • 9不是八进制数字 (4认同)
  • @Mohammed Faisal:Java7现在也有二进制文字:`0b100100101` http://stackoverflow.com/questions/4013441/why-are-there-no-binary-literals-in-java (2认同)

Jim*_*imN 19

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


Ern*_*ill 13

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

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


n0r*_*m1e 8

09是八进制数字文字,但是无效.

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

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


kli*_*liu 6

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