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

Numeric literals in Java - octal?

这是 java 中关于数据类型的一些代码:

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

以上代码的输出为-511

如果代码改为:

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

输出为-777。

为什么输出不同???这段代码背后做了哪些计算???

-0777 被编译器视为八进制数(以 8 为底),其十进制值为 -511 (-(64*7+8*7+7))。 -777 是十进制数。