Java中数组的索引可以为负数吗?

时间:2019-07-25 08:21:21

标签: java arrays

public static void main(String[] args) {
    int[] a = new int[10];
    a[1] =2;
    a[-1] = -2;
    a[0] = 0;
    System.out.println(a[-1]);

}

我在上面编写了代码,编辑器并没有认为它是非法的,但是当我运行它时,它给了我 “线程“主”中的异常java.lang.ArrayIndexOutOfBoundsException:-1”

那么Java中的负数索引始终都是非法的吗?还是有一些特殊情况可以让数组的索引为负数?

7 个答案:

答案 0 :(得分:2)

让我们看一下Oracle文档here。这就是它的意思:

  

一个数组对象包含许多变量。变量的数量可以为零,在这种情况下,数组被认为是空的。数组中包含的变量没有名称。而是使用非负整数索引值的数组访问表达式来引用它们。这些变量称为数组的组件。如果一个数组有n个分量,我们说n是数组的长度;数组的组成部分使用0到n-1(含)之间的整数索引进行引用。

  

在运行时检查所有数组访问;尝试使用索引   小于零或大于或等于   数组会引发ArrayIndexOutOfBoundsException。

要回答这个问题,不,索引不能为负。

答案 1 :(得分:1)

java中不支持负索引。 可以使用

访问最后一个元素
array[array.length-1] = lastElement;

答案 2 :(得分:0)

  

那么Java中的负数索引是否一直都是非法的?

是的

  

还是有一些特殊情况可以让数组的索引为负数?

您可以编写自己的类似数组的集合类型,其中负索引将有效。它将是特定于域的类型,因为我无法想到任何常规应用程序。

一个简单的例子是

// define an anonymous class that overrides ArrayList's get behaviour
List<String> list = new ArrayList<String>() {
    @Override
    public String get(int index) {
        return super.get(Math.abs(index));
    }
};

list.add("a");
list.add("b");

System.out.println(list.get(-1)); // b
System.out.println(list.get(1));  // b

我不建议您这样做。对于任何Java开发人员来说,这都是令人困惑且不寻常的。

答案 3 :(得分:0)

简短回答:否

简短的回答要少一些:数组索引的范围是0到数组的长度减去1。

例如:

int[] ints = new int[5];
ints[0] = 1;  // fine
ints[4] = 1;  // fine
ints[-1] = 1;  // ArrayIndexOutOfBoundsException thrown
ints[5] = 1;  // ArrayIndexOutOfBoundsException thrown

答案 4 :(得分:0)

简而言之,不,它们不能为负。

docs(例如,使用get

  

ArrayIndexOutOfBoundsException-如果指定的索引参数为负,或者大于或等于指定数组的长度

答案 5 :(得分:0)

在Java中,不能使用负索引。它是基于0的正索引。如果使用负索引,则Java将引发"ArrayIndexOutOfBoundsException"异常。

答案 6 :(得分:0)

Java中的数组不能使用负数建立索引,“问题”是直到现在在Java中还没有定义这样的无符号整数,因此只要ax是有效的数字索引,编写myArr [x]就可以编译