【发布时间】:2013-10-30 14:48:34
【问题描述】:
当我为一个会计应用程序编写代码时,我观察到了 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 定义了最大值)。
【问题讨论】:
-
它被称为
MAX_VALUE是有原因的。 -
(Integer.MAX_VALUE + 2) == (Integer.MIN_VALUE + 1)由于整数溢出...您的结果没有什么异常。 -
这意味着
0 < (Integer.MAX_VALUE+2)返回false并且您在for循环上获得零迭代。在你的循环中放一个System.out.print以真正查看循环执行了多少次。 -
好的,我明白了。但我在这里担心的是为什么 java 同时没有抛出任何警告/异常。