在Java ArrayList中的无效索引处添加元素时不抛出IndexOutOfBoundsException

时间:2013-07-31 11:24:10

标签: java arraylist indexoutofboundsexception

如果我们读取add function here的ArrayList文档,显然在无效索引处添加元素会抛出IndexOutOfBoundsException。但是为什么以下代码不会抛出任何异常?

public static void main(String args[]){
        List cities = new ArrayList();
        cities.add("Atlanta");
        cities.add("Boston");

        try {
            for (int i = 10000000; i < cities.size(); i++){
                try {
                    cities.add(i, "+");
                } catch (Exception e) {
                    e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
                }
                System.out.println(cities.size());
            }
        } catch (Exception e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }

        System.out.println(cities);

    }

输出:

[Atlanta, Boston]

Process finished with exit code 0

我目前正在使用jdk 7并运行intellij idea。

3 个答案:

答案 0 :(得分:7)

永远不会输入您的for循环,因为1000000&gt; cities.size()(即2)。

您的代码完全错误。

答案 1 :(得分:0)

如果i值以10000000开头,并且您与2(cities.size())进行比较,那么它将永远不会更小。

答案 2 :(得分:0)

3件事:

  1. 您的循环从i= 10000000cities.size()= 2开始,因此永远不会满足条件i<2并且永远不会输入循环。

  2. try{ }catch (Exception e) { e.printStackTrace(); }

  3. 永远不要这样做。尝试捕获特定的例外情况并利用它们! e.printStackTrace()基本上只是将您的异常转储到输出流上并丢失。

    3。         的System.out.println(市);

    这将使用ArrayList的默认toString()实现。在这种情况下,它将是[Atlanta, Boston]