小编ksh*_*shi的帖子

为什么ArrayList#rangeCheck不检查索引是否为负数?

ArrayList#get,set并首先remove调用该rangeCheck方法.此方法不检查索引是否为负数.它仅检查索引是否大于或等于数组的长度.Javadoc解释了原因; 数组访问会抛出ArrayIndexOutOfBoundsExceptionif索引为负数.

private void rangeCheck(int index) {
    if (index >= size)
        throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
public E get(int index) {
    rangeCheck(index);

    return elementData(index);
}
Run Code Online (Sandbox Code Playgroud)

根据Java Langauage规范,如果索引不仅是负数而且是gte,则数组访问会抛出ArrayIndexOutOfBoundsException.

在运行时检查所有数组访问; 尝试使用小于零或大于或等于数组长度的索引会导致抛出ArrayIndexOutOfBoundsException.

我认为rangeCheck应检查negative和gte,或者为了性能,不应该检查.为什么没有rangeCheck检查索引是否为负数?

java arraylist

6
推荐指数
1
解决办法
743
查看次数

标签 统计

arraylist ×1

java ×1