具有前导零的Int - 意外结果

Phi*_*ndt 8 java

鉴于以下示例:

public class Main {
    public static void main(String[] args) {
        System.out.println(1234);
        System.out.println(01234);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是:

1234
668
Run Code Online (Sandbox Code Playgroud)

为什么?

Mys*_*ial 11

这是因为具有前导零的整数文字是八进制整数(基数为8):

1 * 8^3 + 2 * 8^2 + 3 * 8 + 4 = 668
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 7

在Java语言规范的3.10.1节中描述.基本上十进制文字只是0或1-9后跟一个或多个0-9个字符.

一个八进制文字是0,接着通过一个或多个0-7个字符.

所以01234被认为是八进制的.

(另外,有趣的是"0"是十进制文字,但"00"是八进制文字.我不能想象任何重要的情况,请注意,因为值显然是相同的.)