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 ループの条件を as に変更する for(int i=0; i< Integer.MAX_VALUE ;i++)と、コードが期待どおりに機能しました。

ArrayList は Integer.MAX_VALUE のカウントまで値を保持できるため、この動作は int の最大値で何かを行う必要があります ( 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 に答える