Java - 数组索引超出范围时不是吗?

时间:2013-12-27 22:28:56

标签: java arrays

我在下面的代码中遇到了问题:

/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone {
    public static void main (String[] args) throws java.lang.Exception {
        int[] map = new int[100 * 100];
        System.out.println("Works : " + map[10 * 100 + 5]);
        System.out.println("Works? : " + map[99 * 100 + 99]);
        System.out.println("Works?! : " + map[20 * 100 + 100]);
        //System.out.println("And this?? : " + map[99 * 100 + 100]);
    }
}

正如您所见,最后一行(评论)不起作用;它会抛出一个ArrayIndexOutOfBoundsException

但我不明白;它应该在数组的范围内。数组的大小为100*100,因此99 * 100 + 100 = 100*100因此索引100*100位于数组中。

我已经解决了这个问题;我想知道为什么我在上面的行中得到例外。

代码链接:http://ideone.com/ydgU9s

3 个答案:

答案 0 :(得分:4)

它抛出该异常,因为数组的索引是从0length -1

因此,如果您声明其长度为100 * 100,则索引从0100*100 -1

你尝试了什么:

map[99 * 100 + 100]

等于

map[100*100]

无法加入。

答案 1 :(得分:1)

Arrays是0基础索引。

因此,您可以访问地图中从索引0map.length - 1的元素。

I.e:map[0]map[100*100-1]

99 * 100 + 100 = 10000 > 9999,这就是您获得IOOBE的原因。

enter image description here

答案 2 :(得分:1)

您正在尝试访问地图[10000]。数组索引以0开头,因此大小为10,000的数组表示0到9999。