深入学习Java:关于List下标越界源码分析

之前一直认为只有数组才会出现ArrayIndexOutOfBoundsException数组下标越界异常,而ArrayList就算为空,ArrayList.get(0)也是会返回null。今天忽然发现,ArrayList也会抛越界异常IndexOutOfBoundsException,细心的同学可能发现这两个异常还是有区别的。

深入学习Java:关于List下标越界源码分析

ArrayList下标越界异常

特意测试了一下数组与ArrayList,并记录下来:

1.数组在它的容量范围内,取值不会抛异常,返回null,只有不在容量分为内取值才会抛越界异常ArrayIndexOutOfBoundsException。

深入学习Java:关于List下标越界源码分析

数组在它的容量范围内,取值不会抛异常

深入学习Java:关于List下标越界源码分析

数组下标越界异常

2.ArrayList就算初始化了容量,但当取得下标没有元素时也会抛异常IndexOutOfBoundsException。当我们查看ArrayList的get方法时会发现,当获取的下标大于或等于size,则会抛出IndexOutOfBoundsException异常。

深入学习Java:关于List下标越界源码分析

扫描二维码关注公众号,回复: 12121989 查看本文章

ArrayList的get方法源码

深入学习Java:关于List下标越界源码分析

下标大于或等于size,抛出异常

3.ArrayList中维护着一个数组,如果不是这里限制了,应该是跟数组一样,在它的容量范围内,取值不会抛异常。

深入学习Java:关于List下标越界源码分析

ArrayList中维护着一个数组

深入学习Java:关于List下标越界源码分析

ArrayList的get方法源码

深入学习Java:关于List下标越界源码分析

ArrayList的get方法最终是数组取值

4.ArrayList.get(-1)不会触发前面的IndexOutOfBoundsException异常,但是也不在数组容量范围内,会抛出了跟数组下标越界一样的异常ArrayIndexOutOfBoundsException。

深入学习Java:关于List下标越界源码分析

ArrayList.get(-1)

有时候,看看源码也蛮有意思的。如果有什么不对的地方还望指正!

猜你喜欢

转载自blog.csdn.net/Java_Caiyo/article/details/110230304