为什么输出8?

Ash*_*yay 7 java

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

        int i=010;

        System.out.print(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

8
Run Code Online (Sandbox Code Playgroud)

为什么?逻辑是什么?

JB *_*zet 27

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

所以010意味着,这是.1 * 81 + 0 * 808


Rei*_*eus 15

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

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

一个八进制数字由一个ASCII数字0,随后的一个或多个的ASCII数字0至7中的用下划线穿插,并可以代表正,零或负的整数.

这就是为什么010= 8.