ArrayList的get、set和remove方法在调用rangeCheck方法时,首先会执行该方法。这个方法不会检查索引是否为负数,它只会检查索引是否大于或等于数组的长度。Java文档解释了这个原因:如果索引为负数,则会抛出ArrayIndexOutOfBoundsException异常。
根据Java语言规范,如果索引不仅是负数,而且大于或等于数组长度,则数组访问会抛出ArrayIndexOutOfBoundsException。
所有的数组访问都在运行时进行检查;尝试使用小于零或大于等于数组长度的索引会导致抛出ArrayIndexOutOfBoundsException异常。
我认为rangeCheck应该同时检查负数和大于或等于情况,或者为了提高性能,两种都不检查。为什么rangeCheck不检查索引是否为负数?
private void rangeCheck(int index) {
if (index >= size)
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
public E get(int index) {
rangeCheck(index);
return elementData(index);
}
根据Java语言规范,如果索引不仅是负数,而且大于或等于数组长度,则数组访问会抛出ArrayIndexOutOfBoundsException。
所有的数组访问都在运行时进行检查;尝试使用小于零或大于等于数组长度的索引会导致抛出ArrayIndexOutOfBoundsException异常。
我认为rangeCheck应该同时检查负数和大于或等于情况,或者为了提高性能,两种都不检查。为什么rangeCheck不检查索引是否为负数?