提问者:小点点

是什么原因导致java.lang.ArrayIndexOutOfBoundsException以及如何防止它?


ArrayIndexOutOfBoundsException是什么意思,如何摆脱它?

下面是触发异常的代码示例:

String[] names = { "tom", "bob", "harry" };
for (int i = 0; i <= names.length; i++) {
    System.out.println(names[i]);
}

共3个答案

匿名用户

你的第一个停靠港应该是一份解释得相当清楚的文件:

抛出以指示使用非法索引访问了数组。 索引为负数或大于或等于数组的大小。

所以举个例子:

int[] array = new int[5];
int boom = array[10]; // Throws the exception

至于如何避免。。。 呃,别那么做。 注意数组索引。

人们有时遇到的一个问题是认为数组是1索引的,例如。

int[] array = new int[5];
// ... populate the array here ...
for (int index = 1; index <= array.length; index++)
{
    System.out.println(array[index]);
}

这将丢失第一个元素(index 0),并在index为5时引发异常。 此处的有效索引为0-4(含0-4)。 此处正确的惯用for语句为:

for (int index = 0; index < array.length; index++)

(当然,这是假设您需要索引。如果您可以使用增强的for循环,那么就这样做。)

匿名用户

if (index < 0 || index >= array.length) {
    // Don't use this index. This is out of bounds (borders, limits, whatever).
} else {
    // Yes, you can safely use this index. The index is present in the array.
    Object element = array[index];
}
  • Java教程-语言基础-数组

更新:根据您的代码片段,

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

索引包含数组的长度。 这是界外的。 您需要将<=替换为<

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

匿名用户

摘自本文:for循环中的ArrayIndexOutOfBoundsException

简言之:

的最后一次迭代中

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

i将等于name.length,这是一个非法索引,因为数组索引是从零开始的。

您的代码应为

for (int i = 0; i < name.length; i++) 
                  ^