私たちは、このコードをコンパイルしてからILDASMを使用して、それを検査した場合、我々は次の手順(https://en.wikipedia.org/wiki/List_of_CIL_instructionsを使用して翻訳された)を取得:
IL_0000: nop // I compiled in debug mode, this does nothing
IL_0001: ldc.i4.3 // Push 3 onto the stack as int32.
IL_0002: stloc.0 // Pop a value from stack into local variable 0.
IL_0003: ldc.i4.4 // Push 4 onto the stack as int32.
IL_0004: stloc.1 // Pop a value from stack into local variable 1.
IL_0005: ldloc.0 // Load local variable 0 onto stack.
IL_0006: ldloc.1 // Load local variable 1 onto stack.
IL_0007: mul // Multiply values.
IL_0008: ldloc.0 // Load local variable 0 onto stack.
IL_0009: ldc.i4.1 // Push 1 onto the stack as int32.
IL_000a: sub // Subtract value2 from value1, returning a new value.
IL_000b: dup // Duplicate the value on the top of the stack.
IL_000c: stloc.0 // Pop a value from stack into local variable 0.
IL_000d: div // Divide two values to return a quotient or floating-point result.
IL_000e: stloc.2 // Pop a value from stack into local variable 2.
IL_000f: ret // Return from method, possibly with a value.
これは、式がさえ--x
先行かかわらず、左から右に評価されていることがわかります*
および/
。
これは、C#言語仕様(セクション7.3演算子)に記載されている:
式の演算子の評価の順序は演算子(の 優先順位と結合することによって決定される§7.3.1 )。
式のオペランドは左から右に評価されます。 の例では、F(i)+ G(i ++)* H(i)では、メソッドFが古い の値を使用して呼び出され、メソッドGが古い値iで呼び出され、最後にメソッド Hはiの新しい値で呼び出されます。これはオペレータの優先順位とは無関係の別個の です。
http://stackoverflow.com/questions/2371118/how-do-the-post-increment-i-and-pre-increment-i-operators-work-in-java – kbunarjo
@kbunarjoそれは」doesnの私の質問に答えてください。 –
xは--xになる前に評価されているので、xはまだ3です。 – kbunarjo