2016-07-05 22 views
2
int x = 1; 
System.out.println(x++ + x++ * --x); 

上記のコードは "5"を出力しますが、わかりません。最後のxについては0を得続け、2番目のxにはまだ0が乗算されて2が得られます。助けてください!Javaの優先順位

答えて

3

プログラムは次のようにあなたの文がある処理する方法:

x = 1; 
1 + (increment x) 2 * (increment x)(decrement x) 2 = 
1 + 2 * 2 = 
1 + 4  = 
5 

を追加しました:

あなたの代わりに、実際に計算を行うのあなたのためにそれをプリントアウトし、それを頼む場合、あなたは何が表示されますXは、実際に等しい:

int x = 1; 
    System.out.println(x++ + " + " + x++ + "*" + --x); 

出力:1 + 2*2

+0

今、完璧な意味合いがあります。ありがとう@blahfunk! – Matthew

1

それはこのように動作します:

System.out.println(x++ + x++ * --x); 

最初の二つは、彼らが価値が既にに置かれた後まで実行されることはありません1は、最初のxに置かれた値が2 Aまで増加する接尾なので。図2は、第xに置かれ、値が値に下塗りの前に行われる動作を接頭辞--xため3.

System.out.println(1 + 2 * --x); 

に増加されます。したがって、2に等しく、xは再び2に等しくなります。

System.out.println(1 + 2 * 2); 

この後、これは通常の数学(加算前の乗算)と同じように機能します。

0
public static void main(String[] args) { 

     int x ; 
     x = 1; 

     System.out.println(x++); 
     //1 

     System.out.println(x++ * --x); 
     //2*--3 = 2*2 = 4 

     System.out.println(x++ + (x++ * --x)); 
     //1 + 4 = 5 

     System.out.println(x++ + x++ * --x); 
     //1 + 4 = 5 
    } 
関連する問題