这是一个简单的数组声明和初始化。
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
为什么会这样?
答案 0 :(得分:13)
这与数组无关;以数字0
开头的整数是八进制(基数为8)。合法的八进制数字是0-7,因此08
(或00000008
)是无效的八进制整数文字。 8
的正确八进制为010
。
答案 1 :(得分:6)
这是因为索引前面的0表示Java认为你正在使用八进制编号系统。
答案 2 :(得分:5)
它与数组无关。
以0
开头的整数文字是expected to be octal个数字。
因此,如果您的任何数字大于7
(即8
或9
),那么它将无法编译。
另外:您只获得Exception
,因为您的IDE允许您执行无法编译的代码。这是一个非常糟糕的想法,你应该看看它产生的编译器错误(它可能比你发布的消息有更多的信息)。
答案 3 :(得分:4)
这是因为000001,000007,000008是octal符号。以0开头的整数文字被视为八进制。然而,在基本8数字系统(八进制)中没有000008这样的东西。
(虽然,我希望在编译期间失败,而不是运行时)