課程導言
【變量的賦值與計算都離不開表達式,表達式的運算依賴於變量、常量和運算符。本節課討論Java的表達式的構成、常量的定義、運算符的分類及應用。通過本課的學習你將掌握運用表達式和運算符完成變量賦值、條件判斷、數學運算、邏輯運算等功能操作】
在講述課程內容之前,先看一個求圓面積的問題。求圓面積的公式為;
其中S為圓面積,π為圓周率,r為半徑。
假設用程序來計算圓的面積,S、π、r均為變量,省略的乘號為運算符,r的2次方可以描述為r*r。則上面的公式即為求圓面積的表達式。
結合上面的案例,本節課程分為三個小節,第一小節探討不能修改的變量—常量;第二小節探討表達式的組成結構及運用;第三小節探討Java的基本運算符,包括賦值運算符、算術運算符、關係運算符和邏輯運算符。
第一小節 不能修改的變量——常量
在求圓面積的表達式中,π為圓周率,它是一個不變的量,在程序運行過程中不能被修改。常量同變量一樣,也佔用存儲單元的空間。常量的不可修改性提高了程序的穩定性,同時也提高了程序代碼的可維護性。例如,可以把π定義為常量,當程序需要π參與運算時,直接調用定義的常量π即可。
在java語言中,定義常量的語法如下:
final 數據類型 常量名稱 = 值;
其中,final是Java關鍵字,數據類型可以是Java語言支持的任何數據類型。
例如,下面的語句把圓周率定義為常量:
final double Pl = 3.14;
Java關鍵字是Java語言保留的一類標識符,它們用來標識一種數據類型或者程序的結構,Java關鍵字不能用於變量名、方法名、類名等命名。
第二小節 Java表達式
求圓面積的公式就是一個表達式,其中S、π、r為變量或常量,省略的乘號為運算符,r的2次方可以描述為r*r。求圓面積的表達式為:
S =π* r *r;
表達式是由變量、常量和運算符的組合,它執行計算並返回計算結果。在表達式中運算符作用的變量或常量稱為操作數。在求圓面積的表達式中,乘號(*)為運算符,π和r為操作數。
在一些複雜的運算中,簡單的表達式可以組合為複雜的表達式,其操作數本身可能就是一個表達式。例如:
(num1+num2)*(x+y)
上面的表達式中,運算符乘號(*)兩邊的操作數(num1+num2)和(x+y)本身就是一個表達式。表達式的計算結果一般為數值,如果表達式是一個關係表達式或邏輯表達式,表達式會返回一個布爾值,即真或假。
根據運算符的不同,可以把表達式分為賦值表達式、算術表達式、關係表達式和邏輯表達式。賦值表達式用於把等號右邊的操作數賦值給等號左邊的變量;算術表達式用於數值運算;關係表達式用於條件判斷;邏輯表達式用於邏輯操作。
第三小節 Java運算符
運算符用於連接表達式的操作數,並對操作數執行運算。例如,表達式num1+num2,其操作數是num1和num2,運算符是」+」。在java語言中,運算符可分為5種類型:算術運算符、賦值運算符、關係運算符、邏輯運算符、位運算符。
根據操作數的不同,運算符又分為單目運算符、雙目運算符和三目運算符。單目運算符只有一個操作數,雙目運算符有兩個操作數,三目運算符則有三個操作數。位運算符涉及到二進位位的運算,在java 程序中運用不是很多,因此下面主要介紹算術運算符、賦值運算符、關係運算符和邏輯運算符。
(1)算術運算符
算術運算符用在算術表達式中,其作用和數學中的運算符相同,下表列出了Java語言支持的算術運算符。
算術運算符一般用於數值運算,可對操作數進行加減乘除、取餘、自增和自減操作。
加減乘除、取餘運算符比較容易理解。下面重點說說自增和自減運算符。
自增自減是單目運算符,只需要一個操作數參加運算。例如:a++、++a、a--、--a等。其中,a是操作數,++是自增運算符,--是自減運算符,自增和自減運算符即可以放在變量的前面,也可以放在變量的後面,例如++a、 a++。
自增(++):將變量的值加1,分前綴式(如++a)和後綴式(如a++)。前綴式是先加1再使用;後綴式是先使用再加1。
自減(--):將變量的值減1,分前綴式(如--a)和後綴式(如a--)。前綴式是先減1再使用;後綴式是先使用再減1。
(2)賦值運算符
賦值運算符是雙目運算符,用在賦值表達式中。它的作用是將運算符右邊操作數的值賦給運算符左邊的變量。下表列出了Java語言支持的賦值運算符。
賦值運算符分為兩類,一類是簡單賦值,一類是複合賦值。簡單賦值是直接把運算符右邊操作數的值賦給運算符左邊的變量,運算符有「=」;複合賦值運算符複合賦值是先執行運算符指定的運算,然後再將運算結果賦值給運算符左邊的變量,複合賦值運算符有「+=、-=、*=、/=、%=」。
簡單賦值運算符非常容易明白和理解。下面重點說說複合賦值運算符「+=」操作,其它複合賦值運算符操作原理同「+=」運算符操作原理相同,這裡就不再一一講述了。
複合賦值運算符「+=」操作執行過程如下:
1) 將運算符右側的操作數,與運算符左側的操作數(變量值)執行相加操作;
2) 相加的結果賦值給運算符左側的變量。
例如下面語句:
int num = 10;
num+= 20;
聲明的變量num初始值為10,然後執行num+= 20賦值操作,其操作過程是變量num先與數值20相加,相加的結果是30,然後再將30賦值給變量num,此時變量num的值為30。
(3)關係運算符
關係運算符也是雙目運算符,用於關係表達式。關係運算符對兩個操作數進行比較,並返回比較結果,比較結果的值為一個布爾值(true或false)。下表列出了Java語言支持的關係運算符,表中例子假設A和B不相等,並且其A小於B。
關係運算符用於比較兩個操作數的大小,兩個操作數共有六種比較方式。
第一種比較方式是判斷兩個操作數是否相等,用運算符「==」進行運算,如果兩個操作數相等,比較結果返回true,否則返回false。
第二種比較方式是判斷兩個操作數是否不相等,用運算符「!=」進行運算,如果兩個操作數不相等,比較結果返回true,否則返回false。
第三種比較方式是判斷運算符左邊的操作數是否大於運算符右邊的操作數,用運算符「〉」進行運算,如果左邊的操作數比右邊的操作數大,比較結果返回true,否則返回false。
第四種比較方式是判斷運算符左邊的操作數是否小於運算符右邊的操作數,用運算符「<」進行運算,如果左邊的操作數比右邊的操作數小,比較結果返回true,否則返回false。
第五和第六種比較方式是判斷運算符左邊的操作數是否大於等於或小於等於右邊的操作數,用運算符「〉=和<=」進行運算,如果比較結果滿足要求,則返回true,否則返回false。
(4)邏輯運算符
邏輯運算符連接兩個關係表達式或布爾變量,用於解決多個關係表達式的組合判斷問題,返回的運算結果為布爾值。例如,在數學中,表示一個數值的範圍時,經常用不等式來表述,假設一個數值取值範圍為0到100,設該數值為x,不等式0<x<100給出了x的取值範圍。在java程序語言中,這個不等式只能分解為x<0和x>100兩個關係表達式,然後用邏輯運算符進行連接。下表列出了Java語言支持的邏輯運算符,表中假設布爾變量A為真,變量B為假。
邏輯運算符「&&」是雙目運算符,用於判斷兩個關係表達式或布爾變量是否都為真,只有兩個表達式的返回結果都為真時,運算結果為真,否則運算結果為假。
邏輯運算符「||」是雙目運算符,用於判斷兩個關係表達式或布爾變量是否有一個為真,如果有一個為真,返回結果為true,否則返回false。
邏輯運算符「!」是單目運算符,用於取反關係表達式返回的值。例如:對於關係表達式a>b,如果a> b為真,取反後為false,如果a> b為假,取反後為true。
Java運算符的優先級
和數學中的運算符一樣,Java運算符也存在優先級關係。在Java表達式中,優先級高的運算符先參與運算,優先級低的運算符後參與運算。下表給出了運算符的優先級,表中優先級欄,數字越小優先級越高,每個運算符用中文頓號分割。
表中結合性指運算符結合的順序,通常都是從左到右。從右到左的運算符最典型的就是數值前面的正負號,例如3+-4,則意義為3加-4,符號首先和運算符右側的內容結合。
■ 課程小結
1、常量是相對於變量來說的,變量在程序運行過程中,其值可以被修改,而常量是不允許被修改的。常量多用於固定不變的值,如圓周率、數值、光速等。同變量一樣,常量也可以用標識符命名,並佔用存儲單元空間。在表達式中,數值可以直接參與運算,參與運算的數值也稱為字面常量。
2、表達式同數學中的算式相同,是由變量、常量和運算符組合而成的。最簡單的表達式僅由一個運算符和一個操作數構成,較複雜的表達式則由多個運算符以及多個操作數構成。表達式必須返回計算結果,計算結果或為值或為布爾值。
3、運算符對參與的操作數進行運算,根據參與運算的操作數的個數可把運算符分為單目運算符、雙目運算符和三目運算符。當一個表達式包含多個運算符時,就需要考慮運算符的優先級,優先級高的運算符先參與運算,優先級低的運算符後參與運算。在實際的開發中,不需要特別去記憶運算符的優先級別,也不要刻意的使用運算符的優先級別,對於不清楚優先級的地方使用小括號輔助進行優先級管理。
■ 思考與練習
1、常量和變量有什麼不同?
2、表達式中的數值是常量嗎?
3、算術表達式返回的計算結果是數值還是布爾值?
4、a>b屬於什麼類型的表達式?其返回結果是數值還是布爾值?
5、假設變量a的值為5,執行a+=10操作後,變量a的值是多少?
6、請給出表達式a+=b*2的執行順序。