到目前爲止,咱們已經學習了Java語言的好幾種運算符,包括算術運算符、賦值運算符、邏輯運算符、關係運算符等基礎運算符,而且在書寫賦值語句時都沒添加圓括號,顯然是默認了先完成算術、邏輯、關係等運算,最後才進行賦值操做。也就是說,在這四類運算符當中,賦值運算符的優先級最低,那麼其餘三種運算符的優先級順序又是如何排列的呢?
首先來看算術運算符,Java中的算術運算符主要包括正號負號、加減乘除,以及取餘數符號。對於數學上的四則運算來講,你們早已熟知乘法和除法的優先級高於加法和減法,它們在Java編程中的優先級順序也是如此,由於取餘數運算依賴於除法操做,因此取餘數運算跟乘除運算的優先級是同樣的。另外還有正號和負號運算,其實主要是負號運算的優先級,數學上約定俗成負數能夠直接參與四則運算,這意味着負號做爲數字前面的減號,它的優先級比四則運算要高。因而算術運算符內部各符號的優先級順序依次爲:+正號、-負號 > 乘號*、除號/、取餘數符號% > 加號+、減號-,下面是演示算術運算符優先級的代碼例子:java
// 比較加減乘除以及取餘數運算的優先級順序 int fiveArithmetic = 7+5-4*6/3%9; // 等價於「7+5-(4*6/3%9)」 System.out.println("fiveArithmetic="+fiveArithmetic); // 比較負號與乘除運算的優先級順序 int negativeArithmetic = -8/4+2*-3; // 等價於「(-8)/4+2*(-3)」 System.out.println("negativeArithmetic="+negativeArithmetic);
再來看關係運算符,關係符號包括等號、不等號、大於號、小於號等等,它們互相之間的優先級是同樣的。把關係運算符跟算術運算符做比較,按慣例應當是大於小於號不如加減乘除優先,Java代碼裏的關係運算優先級也確實低於算術運算。也就是說,某個式子要等到加減乘除計算完畢,接下來纔會進行大於、等於和小於的關係比較。下面是比較算術運算符和關係運算符優先級的代碼示例:編程
// 如下比較算術運算符和關係運算符的優先級順序 boolean greaterResult = 1+2>3+4; // 等價於「(1+2)>(3+4)」 System.out.println("greaterResult="+greaterResult); boolean lessResult = 1+2<3+4; // 等價於「(1+2)<(3+4)」 System.out.println("lessResult="+lessResult);
接着看邏輯運算符,因爲邏輯運算的與或非操做只對布爾變量進行,所以它跟操做數值變量的算術運算沒有可比性,布爾類型與數值類型但是井水不犯河水,徹底是風馬牛不相及。故而邏輯運算只能與關係運算一較高下,由於關係運算的計算結果是布爾類型,同時邏輯運算的操做元素也爲布爾類型,因此光憑感受就可認爲關係運算先於邏輯運算進行。這個推理的確適用於「與」、「或」、「異或」這三種邏輯運算,但並不適用於「非」運算,原因在於「非」運算只有一個操做數。凡是隻有一個操做數的運算符都歸類爲一元操做符,而一元操做符的優先級要高於二元操做符,是故負號運算比乘除運算優先,同理「非」運算也比大於等於小於要優先。但凡某變量前面出現了感嘆號「!」,那麼必定會先對該變量進行非運算,除非有個圓括號把感嘆號後面的式子給圈起來。
因而邏輯運算最終的優先級順序爲:邏輯非運算! > 關係運算符(含等號、不等號) > 其它邏輯運算符(含與符號&、或符號|、異或符號^)。下面是比較邏輯運算和關係運算的優先級代碼:less
// 比較邏輯與運算以及關係運算符的優先級順序 boolean andResult = 1>2&3<4; // 等價於「(1>2)&(3<4)」 System.out.println("andResult="+andResult); // 比較邏輯或運算以及關係運算符的優先級順序 boolean orResult = 1>2|3<4; // 等價於「(1>2)|(3<4)」 System.out.println("orResult="+orResult); // 比較邏輯異或運算以及關係運算符的優先級順序 boolean xorResult = 1>2^3<4; // 等價於「(1>2)^(3<4)」 System.out.println("xorResult="+xorResult); // 比較邏輯非運算以及關係運算符的優先級順序 boolean zhen = true; boolean jia = false; boolean notResult = zhen==!jia; // 等價於「zhen==(!jia)」 System.out.println("notResult="+notResult);
總結一下,假若沒有圓括號加以約束,那麼對於數值變量來講,幾種運算符的優先級順序依次爲:正號、負號 > 乘號、除號、取餘號 > 加號、減號 > 大於號、等號、小於號、不等號 > 各類賦值符號;對於布爾變量來講,相關運算符的優先級順序依次爲:邏輯非 > 等號、不等號 > 邏輯與、或、異或 > 各類賦值符號。學習