Java中奇怪的数组行为

时间:2011-09-30 11:33:42

标签: java arrays

这是一个简单的数组声明和初始化。

  int arr[] = new int[10];

    for(int i = 0; i<arr.length; i++){

    arr[i] = i;
    }

System.out.println(arr[000001]); 

System.out.println(arr[000007]);

打印出正确的值,但高于8

的任何值
System.out.println(arr[000008]);

生成java.lang.RuntimeException: Uncompilable source code

为什么会这样?

4 个答案:

答案 0 :(得分:13)

这与数组无关;以数字0开头的整数是八进制(基数为8)。合法的八进制数字是0-7,因此08(或00000008)是无效的八进制整数文字。 8的正确八进制为010

答案 1 :(得分:6)

这是因为索引前面的0表示Java认为你正在使用八进制编号系统。

答案 2 :(得分:5)

它与数组无关。

0开头的整数文字是expected to be octal个数字。

因此,如果您的任何数字大于7(即89),那么它将无法编译。

另外:您只获得Exception,因为您的IDE允许您执行无法编译的代码。这是一个非常糟糕的想法,你应该看看它产生的编译器错误(它可能比你发布的消息有更多的信息)。

答案 3 :(得分:4)

这是因为000001,000007,000008是octal符号。以0开头的整数文字被视为八进制。然而,在基本8数字系统(八进制)中没有000008这样的东西。

(虽然,我希望在编译期间失败,而不是运行时)