0

質問があります、で、
より緊密にバインドJavaしますか? 例を挙げて説明しましょう。誰かが私が得た結果を得る理由を説明してくれるかもしれません。Math.min++

これが私が実行するメソッドです:

private static void testIncrement() {
    int x=10;
    System.out.println(x++);
    System.out.println(x);

    x=10;
    System.out.println("-----------");
    System.out.println(++x);
    System.out.println(x);

    x=10;
    System.out.println("-----------\n"+x); //10
    x=Math.min(255, x++); 
    System.out.println(x); **//x=10 WHY NOT x=11?**

    x=10;
    System.out.println("-----------\n"+x);
    x=Math.min(255, ++x);
    System.out.println(x);
}

結果は次のとおりです。

10
11
-----------
11
11
-----------
10
10
-----------
10
11

私が書いた行では、//x=10 WHY NOT x=11?
なぜx11ではなく10なのか疑問に思います。誰かが私にこれを説明できるかもしれません。

を実行するために使用する(現時点では10)Math.minのコピーを作成するように見えます。次に、オリジナルは10から11にインクリメントされますが、まだ10であるコピーが出てきて、インクリメントされたものを上書きします。 xMath.minxMath.min

これは意味がありますか?この場合、xが11ではなく10である理由について誰かが説明していますか?

ありがとう

PS- Javaでポストインクリメント(i ++)およびプレインクリメント(++ i)演算子がどのように機能するかを完全に理解していますか?

4

1 に答える 1

4

この行を分解してみましょう:

x = Math.min(255, x++); 

x++「;の元の値を記憶し、x次に増分し、次に式の値が元の値になる」という意味xです。これはすべて、割り当ての前に行われます。したがって、次のようになります。

int tmp = x;               // x = 10, tmp = 10
x = x + 1;                 // x = 11, tmp = 10
x = Math.min(255, tmp);    // x = 10

うまくいけば、それはそれを明らかにするはずです。特に、これはそれ自体とは何Math.minの関係もありません。通常のメソッド呼び出しとして動作しているだけです。詳細については、JLSのセクション15.14.2を参照してください。

于 2012-11-22T22:01:11.823 に答える