C語言中文網 目錄

Java運算符優先級

一般而言,單目運算符優先級較高,賦值運算符優先級較低。算術運算符優先級較高,關系和邏輯運算符優先級較低。多數運算符具有左結合性,單目運算符、三目運算符、賦值運算符具有右結合性。

Java 語言中運算符的優先級共分為 14 級,其中 1 級最高,14 級最低。在同一個表達式中運算符優先級高的先執行。表 1 列出了所有的運算符的優先級以及結合性。

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

使用優先級為 1 的小括號可以改變其他運算符的優先級,即如果需要將具有較低優先級的運算符先運算,則可以使用小括號將該運算符和操作符括起來。例如下面的表達式:
(x-y)*z/5

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

再來看一個復雜的表達式,如下所示。
--y || ++x && ++z;

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

如果沒有上述對該表達式執行順序的說明,第一眼看到它時將很難識別優先級。對于這類問題,可以通過添加小括號使表達的順序更加清晰,而不用去查優先級表。如下所示為改進后的表達式。
(--y)||((++x)&&(++z));

技巧:記住這么多運算符的優先級是比較困難的,因此讀者應該在實際應用中多多練習。

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo