什么导致了java.lang.ArrayIndexOutOfBoundsException并且应该怎么样避免呢?| Java Debug 笔记

本文正在参加「Java主题月 – Java Debug笔记活动」,详情查看 活动链接

问题:什么导致了java.lang.ArrayIndexOutOfBoundsException并且应该怎么样避免呢?

ArrayIndexOutOfBoundsException 意思是啥?我要怎么避免呀?

这里是一段导致错误发生的代码

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

回答一

你的第一次调用产生的结果就已经是解释得很清楚的文档了:

抛出的异常显示数组已被一个非法的下标访问。那个下标要么为负数,要么大于或等于数组的大小。

举个例子:

int[] array = new int[5];
int boom = array[10]; // Throws the exception
复制代码

至于怎么样避免嘛。emmmmm,不要这样干就完事了。小心你数组的下标

一个人们经常走进去的误区就是认为数组的下标是从1到indexed,例如:

int[] array = new int[5];
// ... 这里填充数组 ...
for (int index = 1; index <= array.length; index++)
{
    System.out.println(array[index]);
}
复制代码

这就会错过第一个元素(0下标),并且当下标为5的时候就会出现异常。这里合法的下标应该是0-4.正确并且常用的for循环语句应该这样写:

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

(这里是假设你需要这个下标的,当然,如果你使用增强版的循环也是可以的)

回答二

if (index < 0 || index >= array.length) {
    // 不使用这个越界下标
} else {
    // 是的,你可以安全使用这个下标,这个下标是在数组里面的
    Object element = array[index];
}
复制代码

也去参考一下

  • The Java Tutorials – Language Basics – Arrays

更新: 对于你的代码来说,

for (int i = 0; i<=name.length; i++) {
The index is inclusive the array’s length. This is out of bounds. You need to replace <= by <.
下标包含了数组的长度。这是越界的。你应该用<去替代<=

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

文章翻译自Stack Overflow:stackoverflow.com/questions/5…

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享