为什么输出8?

时间:2013-08-05 17:42:30

标签: java

public class Test {  
    public static void main(String... args) {

        int i=010;

        System.out.print(i);
    }
}

输出:

8

为什么呢?逻辑是什么?

6 个答案:

答案 0 :(得分:27)

0是八进制数字的前缀,就像0x是十六进制数字的前缀一样(0b是二进制数字的前缀,因为Java 7)。

所以010表示1 * 81 + 0 * 80,即8

答案 1 :(得分:15)

查看Java Language Specification, Chapter 3.10.1 Integer Literals

  

整数文字可以用十进制(十进制)表示,十六进制   (基数16),八进制(基数8),或二进制(基数2)。

     

八进制数字由ASCII数字0后跟一个或多个组成   ASCII数字0到7 穿插着下划线,并且可以   表示正整数,零整数或负整数。

这就是010 = 8

的原因

答案 2 :(得分:2)

因为010,这里是八进制。

答案 3 :(得分:2)

整数是八进制 - 因为你在开始时有0。

答案 4 :(得分:0)

使用 0前缀表示您使用八进制数字。

答案 5 :(得分:0)

在Java和其他几种语言中,以0开头的整数文字被解释为八进制(基数为8)。

如果您使用多个有效数字编写数字,您可能会对结果感到困惑。

// octal to decimal
01  == 1
02  == 2
07  == 7
010 == 8
020 == 16
024 == 20

// octal to binary (excluding most significant bit)
01  == 1 
02  == 10
07  == 111
010 == 1000 
020 == 10000
024 == 10100