当我为会计应用程序编写代码时,我在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定义了最大值)。
答案 0 :(得分:3)
你试试这个
System.out.println((Integer.MAX_VALUE+2));
输出为-2147483647,小于0,因此不会将任何值添加到列表中。
答案 1 :(得分:0)
当您尝试超过MAX_VALUE时,由于溢出,您将获得较大的负数。从技术上讲,这段代码没有任何违法行为,编译器/ java也不会在运行之前或运行时抛出警告/异常。