会計アプリケーションのコードを書いているときに、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 ループの条件を as に変更する for(int i=0; i< Integer.MAX_VALUE ;i++)
と、コードが期待どおりに機能しました。
ArrayList は Integer.MAX_VALUE のカウントまで値を保持できるため、この動作は int の最大値で何かを行う必要があります ( accountsList.size() は int 型の値を返し、int には最大値が定義されています)。