For文初期化、条件式、ステップ文の実行順序

1491 ワード

今日『think in Java』を見ていると、カンマオペレータを見て、これまで気づかなかったので、サンプルコードに従って一度実行してみましたが、意外な結果になりましたので、ここに記録しておきます
    for (int i =1, j = i + 10; i < 5; i++, j = i * 2){
        System.out.println("i = " + i + " , j = " + j);
    }
    //i = 1 , j = 11
    //i = 2 , j = 4
    //i = 3 , j = 6
    //i = 4 , j = 8
結果が現象と全く違うのはなぜでしょうか.
実はforループの各式の実行順序を理解すれば理解できる
Step 1:setpの初期化2:条件式step 3:実行文step 4:ステップを実行してstep 2を実行
すなわち、int i =1, j = i + 10;はforループに入るときに一度だけ初期化を実行し、その後はループのたびに実行されなくなり、初期化が実行された後、実行条件式i < 5;は条件式が成立すればループを実行し、そうでなければループを終了し、ループを実行した後、ステップ文を実行する.
上の文は分割して、理解しやすいです.
    int i=1,j=a1(i);
    for(; i<5; ){
        System.out.println("i = " + i + " , j = " + j);
        i++;
        j = a2(i);
    }
ここで初期化を行い、条件が成立するか否かを判断し、ループを実行し、ステップを実行し、条件が成立するか否かを判断する...