本文正在参加「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