- 好好學(xué)Java:從零基礎(chǔ)到項目實戰(zhàn)
- 歐陽燊
- 971字
- 2022-07-27 19:14:55
3.1.3 運算符的優(yōu)先級順序
到目前為止,我們已經(jīng)學(xué)習(xí)了Java語言的好幾種運算符,包括算術(shù)運算符、賦值運算符、邏輯運算符、關(guān)系運算符等基礎(chǔ)運算符,并且在書寫賦值語句時都沒添加圓括號,顯然是默認(rèn)了先完成算術(shù)運算、邏輯運算、關(guān)系運算,最后才開展賦值操作。也就是說,在這4類運算符中,賦值運算符的優(yōu)先級最低。那么其他3種運算符的優(yōu)先級順序又是如何排列的呢?
首先來看算術(shù)運算符。Java中的算術(shù)運算符主要包括正號、負(fù)號、加號、減號、乘號、除號以及取余數(shù)符號。對于數(shù)學(xué)上的四則運算來說,大家早已熟知乘法和除法的優(yōu)先級高于加法和減法,它們在Java編程中的優(yōu)先級順序也是如此,因為取余數(shù)運算依賴于除法操作,所以取余數(shù)運算跟乘除運算的優(yōu)先級是一樣的。另外,還有正號和負(fù)號運算,其實主要是負(fù)號運算的優(yōu)先級,數(shù)學(xué)上約定俗成負(fù)數(shù)可以直接參與四則運算,這意味著負(fù)號作為數(shù)字前面的減號,它的優(yōu)先級比四則運算 要高。
于是算術(shù)運算符內(nèi)部各符號的優(yōu)先級順序依次為:正號(+)、負(fù)號(-)>乘號(*)、除號(/)、取余數(shù)符號(%)>加號(+)、減號(-)。下面是演示算術(shù)運算符優(yōu)先級的代碼例子(完整代碼見本章源碼的src\com\control\logic\Priority.java):
// 比較加減乘除以及取余數(shù)運算的優(yōu)先級順序 int fiveArithmetic=7+5-4*6/3%9; // 等價于“7+5-(4*6/3%9)” System.out.println("fiveArithmetic="+fiveArithmetic); // 比較負(fù)號與乘除運算的優(yōu)先級順序 int negativeArithmetic=-8/4+2*-3; // 等價于“(-8)/4+2*(-3)” System.out.println("negativeArithmetic="+negativeArithmetic);
再來看關(guān)系運算符。關(guān)系符號包括等號、不等號、大于號、小于號等,它們互相之間的優(yōu)先級是一樣的。把關(guān)系運算符跟算術(shù)運算符作比較,按慣例應(yīng)當(dāng)是大于號、小于號和等于號不如加號、減號、乘號、除號優(yōu)先,Java代碼中的關(guān)系運算優(yōu)先級也確實低于算術(shù)運算。也就是說,某個式子要等到加減乘除計算完畢,接下來才會開展大于、等于和小于的關(guān)系比較。下面是比較算術(shù)運算符和關(guān)系運算符優(yōu)先級的代碼示例:
// 以下比較算術(shù)運算符和關(guān)系運算符的優(yōu)先級順序 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);
接著看邏輯運算符。由于邏輯運算的與或非操作只對布爾變量生效,因此跟操作數(shù)值變量的算術(shù)運算沒有可比性,布爾類型與數(shù)值類型二者井水不犯河水,完全是風(fēng)馬牛不相及。故邏輯運算只能與關(guān)系運算一較高下。因為關(guān)系運算的計算結(jié)果是布爾類型的,同時邏輯運算的操作元素也為布爾類型的,所以僅憑感覺就可認(rèn)為關(guān)系運算優(yōu)先于邏輯運算。這個推理的確適用于“與”“或”“異或”這3種邏輯運算,但并不適用于“非”運算,緣由在于“非”運算只有一個操作數(shù)。凡是只有一個操作數(shù)的運算符都?xì)w類為一元操作符,而一元操作符的優(yōu)先級要高于二元操作符,因此負(fù)號運算比乘除運算優(yōu)先,同理“非”運算也比大于、等于、小于優(yōu)先。但凡布爾變量前面出現(xiàn)了感嘆號“!”,那么一定會先對該變量做“非”運算,除非有一個圓括號把感嘆號后面的式子括起來。
于是邏輯運算最終的優(yōu)先級順序為:邏輯非運算符(!)>關(guān)系運算符(含等號、不等號)>其他邏輯運算符(含與符號(&)、或符號(|)、異或符號(^))。下面是比較邏輯運算符和關(guān)系運算符的優(yōu)先級的代碼:
// 比較邏輯與運算符以及關(guān)系運算符的優(yōu)先級順序 boolean andResult=1>2&3<4; // 等價于“(1>2)&(3<4)” System.out.println("andResult="+andResult); // 比較邏輯或運算符以及關(guān)系運算符的優(yōu)先級順序 boolean orResult=1>2|3<4; // 等價于“(1>2)|(3<4)” System.out.println("orResult="+orResult); // 比較邏輯異或運算符以及關(guān)系運算符的優(yōu)先級順序 boolean xorResult=1>2^3<4; // 等價于“(1>2)^(3<4)” System.out.println("xorResult="+xorResult); // 比較邏輯非運算符以及關(guān)系運算符的優(yōu)先級順序 boolean zhen=true; boolean jia=false; boolean notResult=zhen==!jia; // 等價于“zhen==(!jia)” System.out.println("notResult="+notResult);
總結(jié)一下,倘若沒有圓括號加以約束,那么對于數(shù)值變量來說,幾種運算符的優(yōu)先級順序依次為:正號、負(fù)號>乘號、除號、取余號>加號、減號>大于號、等號、小于號、不等號>各種賦值符號;對于布爾變量來說,相關(guān)運算符的優(yōu)先級順序依次為:邏輯非>等號、不等號>邏輯與、邏輯或、邏輯異或>各種賦值符號。把這些運算符放到一起,則它們的優(yōu)先級順序排列見表3-2。
表3-2 幾種運算符的優(yōu)先級排序

- Git高手之路
- Web全棧工程師的自我修養(yǎng)
- QGIS:Becoming a GIS Power User
- Python數(shù)據(jù)分析從0到1
- 青少年學(xué)Python(第1冊)
- Kotlin從基礎(chǔ)到實戰(zhàn)
- Protocol-Oriented Programming with Swift
- Java程序設(shè)計教程
- Data Manipulation with R(Second Edition)
- Clojure編程樂趣
- C語言程序設(shè)計實驗指導(dǎo)
- Java EE 程序設(shè)計
- 零基礎(chǔ)入門Python數(shù)據(jù)分析與機器學(xué)習(xí)
- 深度剖析ApacheDubbo核心技術(shù)內(nèi)幕
- 數(shù)據(jù)庫基礎(chǔ)與應(yīng)用實驗教程:Visual FoxPro 6.0