以下のコードを検討してください。
public class Test {
public static void main(String args[]) {
long startTime = System.nanoTime();
for(int i = 1; i > 0; i++) {
System.out.println(i);
}
System.out.println(System.nanoTime() - startTime);
}
}
出力:
1
2
3
4
5
.
.
.
2147483643
2147483644
2147483645
2147483646
2147483647
16825610038948
startTime大量の行があるため、Eclipse コンソールから値を取得できません。
値は常に 0 より大きいため、上記For-Loopをと呼びます。理論的には、ループは終了しないはずです。しかし、最大値が であるを使用しているため、インクリメントすると、つまりで終了します。Infinite Loopiint2147483647For-Loopii++i = 2147483647
したがって、 when をインクリメントすると、 の値が負またはゼロになるため、条件が になり、 が終了すると想定しiてi = 2147483647いiましfalseたFor-Loop。
確認のために、以下のコードを試しました。
int i = 2147483647; // Maximum value of int
System.out.println(i++);
したがって、私の仮定が正しければ、負の数またはゼロの値が出力されているはずです。しかし、代わりに次の出力が得られました。
2147483647
ここに私の質問/疑問があります:
i値をインクリメントするi = 2147483647と、 の値はi同じまま2147483647です。では、上記のシナリオで、はどのようにしてFor-loopエラーや例外なしで終了したのでしょうか?