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

上面的代碼打印出「5」,但我不明白怎麼做?我一直得到零的最後一個x然後乘以第二個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.後綴。 2被放入第二x和值增加到3.

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

由於--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 
    }