ArrayIndexOutOfBoundsException - 数组是否自动初始化为默认值? (JAVA)

时间:2014-02-25 23:55:02

标签: java arrays indexoutofboundsexception

我有一个类型的对象数组,比方说,对象。

Object[] array = new Object[M];

据我所知,当你指定数组的长度为M(其中M为某个数字)时,会创建一个数组,其中包含此类型数组的M个默认值。例如,如果我有一个数组int [],那么就会有M个零。现在我有一个包含对象的数组,我期望有M个空对象,从索引0到索引M-1。

但是,当我第一次为索引M-1分配值时:

array[M-1] = obj;

我得到一个java.lang.ArrayIndexOutOfBoundsException:M

显然我误解了一些事情,但我不知道它是什么......你能帮我解决一下吗?

编辑:我在下面发表评论,可能会有所帮助。

假设我有一组整数,例如

int[] array = new int[3]; 

当这个语句运行时,我认为 - 如果我错了,请纠正我 - 如果我打印我的数组我会得到[0,0,0],即我将有零(int []的标准值数组)索引0,1和2(因为我定义了长度3)。

现在,如果我尝试做的话:

array[2] = 5 

我应该得到[0,0,5]而不是ArrayIndexOutOfBoundsException,因为索引在分配时已经存在 - 它是一个固定的数组,而不是从大小为零并且增长到容量(甚至更多)的动态数组!

这正是我在代码中所做的 - 只是区别,我有对象而不是整数。因此,如果我说的是正确的,那么在其他地方是我的代码中的问题,我应该在另一个问题中发布。

编辑2:请检查Cache Implemented Using an Array - ArrayIndexOutOfBoundsException (Java)

1 个答案:

答案 0 :(得分:3)

问题是x是否在0..M-1的边界之外。

例如,假设您在x = 0时尝试分配数组[x-1]。

然后你会得到这个ArrayIndexOutOfBoundsException