Java中的数字文字 - 八进制?

Sow*_*mya 4 java literals octal

以下是java on datatypes中的一些代码:

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

上面代码的输出是-511

如果代码更改为:

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

输出为-777.

为什么输出不同??? 这段代码背后的计算是什么?

Era*_*ran 8

-0777编译器将其视为八进制数(基数8),其十进制值为-511( - (64*7 + 8*7 + 7)).-777是十进制数.