在一個表達式中可能包含多個有不一樣運算符鏈接起來的、具備不一樣數據類型的數據對象;因爲表達式有多種運算,不一樣的結合順序可能得出不一樣結果甚至出現錯誤運算錯誤,由於當表達式中含多種運算時,必須按必定順序進行結合,才能保證運算的合理性和結果的正確性、惟一性。java
1.優先級與求值順序無關。如a+b && bc,雖然優先級最高,但這個表達式求值順序是從左到右。
2.優先級從上到下依次遞減,最上面具備最高的優先級,逗號操做符具備最低的優先級。
3.相同優先級中,按結合性進行結合。大多數運算符結合性是從左到右,只有三個優先級是從右至左結合的,它們是單目運算符、條件運算符、賦值運算符。
4.基本的優先級須要記住:
** 指針最優,單目運算優於雙目運算。如正負號。
先算術運算,後移位運算,最後位運算。請特別注意:1 << 3 + 2 & 7等價於 (1 << (3 + 2))&7.
邏輯運算最後結合。 **指針
運算符 | 結合性 |
---|---|
. ( ) (方法調用) | 從左向右 |
! ~ ++ -- +(一元運算) -(一元運算) | 從右向左 |
* / % | 從左向右 |
+ - | 從左向右 |
<< >> >>> | 從左向右 |
< <= > >= instanceof | 從左向右 |
== != | 從左向右 |
& | 從左向右 |
^ | 從左向右 |
| | 從左向右 |
&& | 從左向右 |
|| | 從左向右 |
?: | 從右向左 |
= | 從右向左 |