Java中奇怪的数组行为

Mob*_*Mob 3 java arrays

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

  int arr[] = new int[10];

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

    arr[i] = i;
    }
Run Code Online (Sandbox Code Playgroud)

这个

System.out.println(arr[000001]); 
Run Code Online (Sandbox Code Playgroud)

System.out.println(arr[000007]);
Run Code Online (Sandbox Code Playgroud)

打印出正确的值,但上面的任何值 8

System.out.println(arr[000008]);
Run Code Online (Sandbox Code Playgroud)

生产一个 java.lang.RuntimeException: Uncompilable source code

为什么会这样?

Ern*_*ill 13

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


S.L*_*ica 6

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


Joa*_*uer 5

它与数组无关.

以a开头整型常量0预期为 八进制数字.

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

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