2014-09-01 67 views
1

我試圖瞭解評價爲下面的Java代碼的輸出是5的順序:的Java運算符優先級與+ =和++(前遞增)

int a = 1; 
a += 2 + ++a; 
System.out.println(a); 

我的運算符優先級的理解(最高首先列出)是:

++ 2 
+ 4 
+= 14 

從這個名單

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html

評估最終操作員(+ =)時,是否在評估+ =開始時不是a 2的值?

+0

形式的化合物,賦值表達式'E1運= E2'相當於E1 =((E1)op(E2))'。 – 2014-09-01 22:31:42

+0

如果對_language_有疑問,請查看語言規格 – jdphenix 2014-09-01 22:42:15

+0

瞭解語言的功能非常有趣。但是:在真實代碼中,最好的做法是不要將增量/減量運算符作爲較大表達式的一部分進行混合,即使語言恰好允許它。 – 2014-09-02 15:37:18

回答

6

形式E1 op= E2JLS says the following about the compound assignment operator +=

的化合物賦值表達式是等效於 E1 = (T) ((E1) op (E2)),其中TE1類型,不同之處在於E1 僅一次評價。

所以在

int a = 1; 
a += 2 + ++a; 

使用+=等效於空白

int a = 1; 
a = (int) ((a) + (2 + ++a)); 

填充並且這成爲

a = 1 + (2 + 2);