運算子的優先順序
阿新 • • 發佈:2020-11-18
運算子優先順序表
優先順序 | 運算子 | 結合性 |
---|---|---|
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));
總結:由於運算子優先順序非常多,全部記住非常困難,瞭解大概即可,遇到麻煩的運算常用括號去引導。