1. 程式人生 > >Java中關於x++與++x在運算中值的變化

Java中關於x++與++x在運算中值的變化

首先(x++)+1中的小括號毫無意義,小括號並不會改變++運算的優先順序,

對錶達式自增運算子加括號絕大部分是因為需要進行程式碼的格式化,

並告訴java++應該是如何被解釋的,否則x+++x只會有一種解釋方式。但要注意是否該自增變數的後一表達式元素是否為常量。

如都為變數+++就存在2種情況。

其次,x+++1,也只能進行x++ + 1 這種分割,++1是不行的,常量無法自增。

                x = 5;
                System.out.println(x+++x++);
請問,為什麼是11,不是10?
這一題否定了一部分人所說的自增是表示式運算之後進行的,而另一個模糊的解釋是x參加一次運算之後,看起來好像是對的。

分析表示式,會發現,如果是x參加一次運算,那麼這個表示式就成了x+x    x++    syso(x)    x++

所以嚴格來說,是參與一次不為自己的運算。

我習慣用另一種方式來理解他,雖然這與實際賦值的順序不一致,因為壓後了,但是它好理解,

x++的自增將會出現在下次x取值之前。

                x=5;

                System.out.println(x+++1+x++);
請問為什麼是12?
表示式為 x+1   ++x  (5+1)+6  x++


                x=5;
                System.out.println(x+++x);

請問為什麼是11?
(x++) + x 和 x + (++x)雖然執行順序上完全不一致,但是他們結果是一致的。


                x=5;
                System.out.println(x++ + 1); 
                System.out.println(x++ + x);
因為x+++x並不會被java理解成x +  ++x。
x++ + 1被解釋成x+1 x++
x++ + x被解釋成 x++  x+x   這裡為什麼是這樣呢,因為+x之前,x已經是6了


而這個問題可以使用
        x = 5;
        y = x;
        System.out.println(x+++y);


這樣會發現結果為10,也就是說,x++ + y
自增和自減在實際應用是經常用到的,而在複雜的表示式中,你仍然需要用小括號合理解釋到底是先加還是後加。

答案可以用來理解,但細微上解釋跟位元組碼執行並不相同,如果想仔細瞭解,可以javap -c <class檔名>來檢視位元組碼得到正規的執行順序