Java中奇怪的数组行为
这是一个简单的数组声明和初始化Java中奇怪的数组行为,java,arrays,Java,Arrays,这是一个简单的数组声明和初始化 int arr[] = new int[10]; for(int i = 0; i<arr.length; i++){ arr[i] = i; } 到 打印出正确的值,但任何高于8 System.out.println(arr[000008]); 生成java.lang.RuntimeException:不可编译的源代码 为什么会发生这种情况?这与数组无关;以数字0开头的整数是八进制(以8为基数)。合法的八进制数字是0-7
int arr[] = new int[10];
for(int i = 0; i<arr.length; i++){
arr[i] = i;
}
到
打印出正确的值,但任何高于8
System.out.println(arr[000008]);
生成java.lang.RuntimeException:不可编译的源代码
为什么会发生这种情况?这与数组无关;以数字0
开头的整数是八进制(以8为基数)。合法的八进制数字是0-7,因此08
(或00000008
)是无效的八进制整数文本。8
的正确八进制是010
它与数组无关
以0
开头的整数文本是数字
因此,如果其中有任何大于7
(即8
或9
)的diggit,那么它将无法编译
另外:您只会得到一个异常
,因为您的IDE允许您执行未编译的代码。这是一个非常糟糕的想法,你应该看看它产生的编译器错误(它可能比你发布的消息有更多的信息)。这是因为索引前面的0使Java认为你在使用八进制编号系统。发生这种情况是因为000001,000007,000008是符号。以0开头的整数文字被视为八进制。然而,在基数为8的数字系统(八进制)中没有000008这样的东西
(不过,我本以为这会在编译时失败,而不是在运行时)我一生中从未见过这种异常。在我的IDE中,它只是不编译。好吧,它是NetBeans的东西。当运行一个已经编译过的应用程序时,我很惊讶这个异常被抛出!
System.out.println(arr[000007]);
System.out.println(arr[000008]);