对于java中的循环异常行为

时间:2013-10-30 14:48:35

标签: java for-loop

当我为会计应用程序编写代码时,我在java中观察到List的异常行为。执行下面的代码后,

List<String> accountsList = new ArrayList<String>();

    for(int i=0; i< (Integer.MAX_VALUE+2) ;i++){
        accountsList.add("Account #"+i);
    }

    System.out.println("# of accounts in list : "+accountsList.size());

输出为 - # of accounts in list : 0,非常有趣。代码也正确运行而不会抛出任何异常。如果这是因为int的值溢出,为什么没有java抛出警告/异常。

然后我修改了for循环的条件,for(int i=0; i< Integer.MAX_VALUE ;i++)和代码按预期工作。

此行为是否必须对int的最大值执行任何操作,因为ArrayList可以保存值直到Integer.MAX_VALUE计数(accountsList.size()返回int类型的值,并且int定义了最大值)。

2 个答案:

答案 0 :(得分:3)

你试试这个

System.out.println((Integer.MAX_VALUE+2));

输出为-2147483647,小于0,因此不会将任何值添加到列表中。

答案 1 :(得分:0)

当您尝试超过MAX_VALUE时,由于溢出,您将获得较大的负数。从技术上讲,这段代码没有任何违法行为,编译器/ java也不会在运行之前或运行时抛出警告/异常。