我有一个类型的对象数组,比方说,对象。
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)
答案 0 :(得分:3)
问题是x是否在0..M-1的边界之外。
例如,假设您在x = 0时尝试分配数组[x-1]。
然后你会得到这个ArrayIndexOutOfBoundsException