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

        int i=010;

        System.out.print(i);
    }
}

输出:

8

为什么?逻辑是什么?

4

6 回答 6

27

0是八进制数的前缀,就像0x是十六进制数的前缀(并且0b是二进制数的前缀,从 Java 7 开始)。

所以的010意思,就是。1 * 81 + 0 * 808

于 2013-08-05T17:43:30.270 回答
15

查看Java 语言规范,第 3.10.1 章整数文字

整数文字可以用十进制(以 10 为底)、十六进制(以 16 为底)、八进制(以 8 为底)或二进制(以 2 为底)来表示。

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

这就是为什么010= 8

于 2013-08-05T17:44:50.683 回答
2

因为010,这里是八进制。

于 2013-08-05T17:43:40.427 回答
2

整数在八进制系统中,因为您在开始时有 0。

于 2013-08-05T17:44:03.280 回答
0

使用0 前缀意味着您使用的是八进制数。

于 2013-08-06T10:49:26.320 回答
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
于 2013-08-06T10:57:39.783 回答