4

以下のコードを検討してください。

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 をインクリメントすると、 の値が負またはゼロになるため、条件が になり、 が終了すると想定しii = 2147483647iましfalseFor-Loop

確認のために、以下のコードを試しました。

int i = 2147483647; // Maximum value of int
System.out.println(i++);

したがって、私の仮定が正しければ、負の数またはゼロの値が出力されているはずです。しかし、代わりに次の出力が得られました。

2147483647

ここに私の質問/疑問があります:

i値をインクリメントするi = 2147483647と、 の値はi同じまま2147483647です。では、上記のシナリオで、はどのようにしてFor-loopエラーや例外なしで終了したのでしょうか?

4

4 に答える 4

10

++iSystem.out.println();にあるはずです。

System.out.println(++i);

をインクリメントすると、 が になるiときi = 2147483647、あなたの仮定は正しいです。i-2147483648

于 2013-10-15T04:20:29.663 に答える
2

i++とは異なり++iます。1つ目はポストインクリメントで、2 つ目はプリインクリメントです。

i++意味

の現在の値をi式に使用し、それをインクリメントします

一方、探しているものは次のとおりです。

の値をi1 増やしてから、式で使用します

于 2013-10-15T04:21:11.197 に答える
1

次のコードは、++i と i++ の詳細を明確にします。

    int i = 0
    System.out.println(" before i++ " + i++);
    System.out.println(" after i++ " + i);
    i = 0;
    System.out.println(" before ++i " + ++i);
    System.out.println(" after ++i " + i);

版画

 before i++ 0
 after i++ 1
 before ++i 1
 after ++i 1

そう

int i = 0;
int j = ++i;
i = 0;
int c = i++;

この場合、j の値は 1 になり、c の値は 0 になります。

于 2013-10-15T04:55:23.163 に答える
0

post incrementi++は、sout の実行後に値をインクリメントします。++i変更された値を確認してください。

于 2013-10-15T05:13:37.820 に答える