为什么此代码会产生IndexOutOfBoundsException?

时间:2016-04-04 00:55:47

标签: java string for-loop arraylist indexoutofboundsexception

有人可以解释这个问题......

为什么:

String letters[] = { "A", "B", "C" };
ArrayList<String> list = new ArrayList<String>(3);

for(int i=2 ; i >= 0 ; i--)
    list.set(i,letters[i]);


for(int i=0 ; i < list.size() ; i++)
    System.out.print(list.get(i));

制作: IndexOutOfBoundsException

1 个答案:

答案 0 :(得分:5)

由于new ArrayList<String>(3)创建的ArrayList 初始容量为3,因此不是包含3个元素的列表:

ArrayList<String> list = new ArrayList<String>(3);
list.size();//output 0

因此,当您第一次调用list.set(i,letters[i])时,您正在尝试访问不存在的元素2。

另一方面,此代码将按照您的预期方式运行:

ArrayList<String> list = new ArrayList<String>(Collections.nCopies(3, null));