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中的负数索引始终都是非法的吗?还是有一些特殊情况可以让数组的索引为负数?
答案 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)
答案 5 :(得分:0)
在Java中,不能使用负索引。它是基于0的正索引。如果使用负索引,则Java将引发"ArrayIndexOutOfBoundsException"
异常。
答案 6 :(得分:0)
Java中的数组不能使用负数建立索引,“问题”是直到现在在Java中还没有定义这样的无符号整数,因此只要ax是有效的数字索引,编写myArr [x]就可以编译>