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

时间:2011-11-24 08:31:50

标签: java

给出以下样本:

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

输出是:

1234
668

为什么?

4 个答案:

答案 0 :(得分:11)

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

1 * 8^3 + 2 * 8^2 + 3 * 8 + 4 = 668

答案 1 :(得分:7)

section 3.10.1 of the Java Language Specification中对此进行了描述。基本上 decimal 文字只是0或1-9后跟一个或多个0-9个字符。

octal 文字是0后跟一个或多个0-7个字符。

因此,01234被视为八进制。

(另外,有趣的是“0”是十进制文字,但“00”是八进制文字。考虑到价值显然是相同的,我无法想象任何重要的情况。)

答案 2 :(得分:4)

前导零表示八进制(基数为8)。基础-8上的1234是668。

答案 3 :(得分:4)

具有前导零的数字文字被解释为八进制,即基数为8。