2013-10-30 33 views
2

雖然我正在爲會計應用程序編寫代碼,但我觀察到java在List中的異常行爲。執行以下代碼後,For循環在java中的異常行爲

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具有最大值定義的值)。

+10

有個原因叫做MAX_VALUE。 –

+3

'(Integer.MAX_VALUE + 2)==(Integer.MIN_VALUE + 1)'由於整數溢出...沒有什麼不尋常的結果。 – haraldK

+2

http://stackoverflow.com/questions/9397475/why-integer-max-value-1-integer-min-value – kosa

回答

0

當您嘗試超出MAX_VALUE時,由於溢出,您會得到一個很大的負數。從技術上講,這段代碼沒有任何非法之處,編譯器/ java不會在運行之前或運行時拋出警告/異常。

3

你試試這個

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

輸出爲-2147483647小於0,沒有值將被添加到列表中。