2016-08-20 11 views
-1

は)(、のは、最初の例ではjava演算子の優先度y = x +(x = 10);

int x=1; 
int y1 = (x=10) + x; 
System.out.println(y1); 
// prints 20 

x = 1; 
int y2 = x + (x=10); 
System.out.println(y2); 
// prints 11 

を考えてみましょう、それが最も高い優先度を持っているとして、最初に実行されます。 xの値を10に設定すると、右側のオペランド(x)は新しい値10を取得します。y1 = 10+10 = 20

第2の例では、左側のオペランド 'x'が値1を取得し、 xは新しい値10を取得するので、y2 = 1+10 = 11;

なぜ2番目の例では()が最初に実行されないのですか。 (x = 10)が最初に実行され、左側のオペランドxが新しい値10に設定され、したがってy2 = 20に設定される必要があります。このようなことは起こりませんでしたか?

+1

オペランドの評価順序と優先順位を混同しないでください。 –

答えて

2

オペランドは単純に左から右に評価されると思います。右オペランドのかっこは、左オペランドが最初に評価されるという事実を変更しません。

+1

信じてはいけません。確信してください。 [Java言語仕様§15.7評価順序](https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.7)を参照してください。* Javaプログラミング言語は、オペレータのオペランドは、**左から右の特定の評価順序で評価されているように見えます** – Andreas

+0

@アンドレアスありがとう! – smarx

0

おそらくint z = f() + g()について考えてみましょう。つまり、2つの方法を呼び出すことです。最初にg()が呼び出されるのはなぜですか? int z = f() + (g())(追加の括弧に気を付けてください)はどうですか?左から右へ何が起きているのですか。(x=10)は、評価されたときにxに割り当てられ、10をこの構文が使われる場所に返します。