带前导零的整数 - 意外结果

8
给定以下示例:
public class Main {
    public static void main(String[] args) {
        System.out.println(1234);
        System.out.println(01234);
    }
}

输出结果为:
1234
668

为什么?

1
当然是八进制前缀-我应该知道...谢谢。 - Philipp Wendt
4个回答

11

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

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

如果这适用于任何数字文字,那是否意味着我不能在将字符串转换为整数时直接将八进制数字转换为十进制?如果字符串的第一个数字是0,那么需要先将其转换为十进制吗?谢谢。 - DevilInDisguise

7
这在Java语言规范的第3.10.1节中描述。基本上,一个十进制字面量要么是0,要么是1-9后跟一个或多个0-9字符。
一个八进制字面量是一个0后跟一个或多个0-7字符。
因此,01234被视为八进制。
(另外,有趣的是,“0”是一个十进制字面量,但“00”是一个八进制字面量。我无法想象任何情况下这会有影响,毕竟这些值显然是相同的。)

1
哈哈,Jon Skeet 也会打错拼音 :) 八进制数字只能是0-7。 - Daniel Fischer

4

前导零表示一个八进制(基数为8)数字。在八进制下,1234等于668。


4

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接