2

当我为一个会计应用程序编写代码时,我观察到了 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 的 Max 值有关,因为 ArrayList 可以保存值直到 Integer.MAX_VALUE 的计数(accountsList.size() 返回 int 类型的值,并且 int 定义了最大值)。

4

2 回答 2

3

你试试这个

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

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

于 2013-10-30T14:51:22.857 回答
0

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

于 2013-10-30T14:58:33.533 回答