1. 程式人生 > 實用技巧 >運算子的優先順序

運算子的優先順序

運算子優先順序表

優先順序 運算子 結合性
1 ()、[]、{} 從左向右
2 !、+、-、~、++、-- 從右向左
3 *、/、% 從左向右
4 +、- 從左向右
5 «、»、>>> 從左向右
6 <、<=、>、>=、instanceof 從左向右
7 ==、!= 從左向右
8 & 從左向右
9 ^ 從左向右
10 | 從左向右
11 && 從左向右
12 || 從左向右
13 ?: 從右向左
14 =、+=、-=、*=、/=、&=、|=、^=、~=、«=、»=、>>>= 從右向左

簡要概括:括號內優先順序最高,其次是自增自減類,加減乘除取餘和數學中的優先順序一樣,最後關係運算符優先順序高於邏輯運算子。

例如下面的表示式:

(x-y)*z/5

在這個表示式中先進行括號內的減法運算,再將結果與 z 相乘,最後將積除以 5 得出結果。整個表示式的順序按照從左向右執行,比較容易理解。

再來看一個複雜的表示式,如下所示。

--y || ++x && ++z;

這個表示式中包含了算術運算子和邏輯運算子。根據表 1 中列出的優先順序,可以確定它的執行順序如下:
① 先計算 y 的自減運算子,即 --y。
② 再計算 x 的自增運算子,即 ++x。
③ 接著計算 z 的自增運算子,即 ++z。
④ 由於邏輯與比邏輯或的優先順序高,這裡將 ② 和 ③ 的結果進行邏輯與運算,即 ++x && ++z。
⑤ 最後將 ④ 的結果與 ① 進行邏輯或運算,即 --y||++x&&++z。

如果沒有上述對該表示式執行順序的說明,第一眼看到它時將很難識別優先順序。對於這類問題,可以通過新增小括號使表達的順序更加清晰,而不用去查優先順序表。如下所示為改進後的表示式。

(--y)||((++x)&&(++z));

總結:由於運算子優先順序非常多,全部記住非常困難,瞭解大概即可,遇到麻煩的運算常用括號去引導。