Java教程

浅析Java里的ArrayList的rangeCheck报错

本文主要是介绍浅析Java里的ArrayList的rangeCheck报错,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、问题背景

  报错信息:java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.RangeCheck(ArrayList.

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
      at java.util.ArrayList.RangeCheck(ArrayList.java:547)
      at java.util.ArrayList.get(ArrayList.java:322)
      at AddressBookPrimer.main(AddressBookPrimer.java:21)

  如果articles返回的不是 null,而是一个空数组的话,那么这个代码就报错了,所以需要修改下:数组不能只判空,还需要判断size() >0

二、问题分析

  ArrayList#getsetremove首先调用rangeCheck方法。此方法不检查索引是否为负数,它只检查索引是否大于或等于数组的长度。

  Javadoc解释了原因:如果索引是负数,则数组访问会抛出ArrayIndexOutOfBoundsException

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

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

  如果数组是个空数组,size 为 0 ,而你又去取第一个元素 get(0),元素都没有,所以就会报错。

这篇关于浅析Java里的ArrayList的rangeCheck报错的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!