7

だから私は演算子をテストしていました.Javaで友人を助けていて、プログラミングの奇妙な順序に出くわしたからです. 次のコードを実行するとどうなりますか

public static void main(String[] args) {
    int B = 6;
    //First console print out
    System.out.println(B+=++B);
    System.out.println(B);
    B = 6;
    //Second Console print out
    System.out.println(B+=B++);
    System.out.println(B);
}

次のコードの出力は次のとおりです。

13
13

12   
12

2 番目のコンソール B の数学出力 = 12 の原因は、それ自体に 6 を追加した後、++ (+1) が続く場合です。

4

8 に答える 8

8

ここでの違いはインクリメント演算子にあります。

の場合B += ++B、B は 7 にインクリメントされ、古い自己 (6) に加算されて 13 になります。

の場合B += B++、B はそれ自体に加算されて 12 になり、次に ++ が実行されて結果が B に格納されますが、計算の結果は ++ の上に B に格納されます。したがって、出力として 12 が得られます。

于 2013-09-09T22:23:37.600 に答える
5
ACTION       EFFECT   NOTES
----------   ------   -----
B = 6        B = 6
B += (++B)   B += 7   // B is incremented and the value is returned
B            B = 13

B = 6        B = 6
B += (B++)   B += 6   // The current value of B is the result of (B++) and B is
                      // incremented *after* the (B++) expression; however, the
                      // assignment to B (+=) happens after the (++) but it does
                      // not re-read B and thereby covers up the post increment.
B            B = 12
于 2013-09-09T22:26:59.497 に答える
2

それ自体に 6 を追加し、その後に ++ を追加します

それは完全に起こることではありません。B++の結果(つまり、B++評価される値) をに追加しBます。後置インクリメント演算子はインクリメントの前のB++オペランドの値に評価されるため、6 に評価されます。したがって、 に 6 を追加します。B

割り当ての後にインクリメントが発生するはずだと考えていますが、それは ++ の仕組みではありません。インクリメントはすぐに行われますが、式Bはインクリメント前の の値に評価されます。したがって、が評価されBた直後に再割り当てB++するため、割り当てによってインクリメントが元に戻されます。

于 2013-09-09T22:26:20.683 に答える
0

b+=xと同じb = b + xです。

あなたはそうしています、それは次のようにb+=b++書くことができますb = b + b++b=6

b = 6 + 6;

2番目のパラメーターは最初に6に評価され(b++最初に元の値を返し、次にインクリメントしますb)、結果(12 = 6 + 6)をbインクリメントに割り当てても問題はなく、bは12になります。

于 2013-09-09T22:24:38.177 に答える
0

書き換えと置換:B = 6 + 6この後、 B から現在の値を取得してインクリメントするB++ため、実行されるためB++、B++ が発生した場合は関係ありません。B の値は 12 になります。

于 2013-09-09T22:25:52.657 に答える
0

インクリメント演算子を変数の前に置くと、インクリメントして変数を表示します。変数の後にインクリメント演算子を置くと、変数が表示され、それに 1 が追加されます。

于 2013-09-09T22:26:04.610 に答える