我有一个类型的对象数组,比方说,Object。
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)
最佳答案
问题是 x 是否超出 0..M-1 的边界。
例如,假设您尝试在 x = 0 时分配 array[x-1]。
然后你会得到这个 ArrayIndexOutOfBoundsException
关于java - ArrayIndexOutOfBoundsException - 数组本身没有初始化为默认值吗? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22028853/