关于java:一个关于List的IndexOutOfBoundsException异常记录

48次阅读

共计 878 个字符,预计需要花费 3 分钟才能阅读完成。

上面的代码是一个对于 List 的经典问题,平时工作中,咱们对空指针会比拟警觉,稍不注意可能就会写进去上面的问题代码。

List<Integer> list = new ArrayList<>();
Integer a = list.get(0);

下面的代码运行之后会报上面的数组越界的异样

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
main
    at java.util.ArrayList.rangeCheck(ArrayList.java:653)
    at java.util.ArrayList.get(ArrayList.java:429)
    at com.lingyejun.dating.chap11.thread.MyDemo3.main(MyDemo3.java:17)

根本原因在于 new ArrayList<>() 的时候创立进去的是一个不蕴含任何内容的空数组,此时的数组 size 是 0,而后 list.get(0) 操作时,index>=size,所以就呈现了数组越界的异样,在这里小记一下。

拷贝了一部分的源码如下:

private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
    
public ArrayList() {this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;}
    
public E get(int index) {rangeCheck(index);

    return elementData(index);
}

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

E elementData(int index) {return (E) elementData[index];
}

本篇文章如有帮忙到您,请给「翎野君」点个赞,感谢您的反对。

正文完
 0