一个关于List的IndexOutOfBoundsException异常记录

下面的代码是一个关于List的经典问题,平常工作中,我们对空指针会比较警惕,稍不留意可能就会写出来下面的问题代码。

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

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

1
2
3
4
5
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,所以就出现了数组越界的异常,在这里小记一下。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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];
}

 

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

posted @   翎野君  阅读(2729)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2017-09-24 jar包
点击右上角即可分享
微信分享提示