2.4 運算符與表達式

2.4 運算符與表達式
Java語言有着相當廣泛的運算功能。所謂運算,就是通過某些運算符將一個或多個運算對象連接起來,組成一個符合Java語法的式子,這樣的式子被稱爲表達式,系統經過對表達式的處理,產生一定的結果。其中,運算對象必須屬於某種確定的數據類型。對大多數的運算符來說,運算符的前後都需要有運算對象,這種運算符稱爲二元運算符。但也有些運算符,它的運算對象只有一個,例如,對一個數進行取負值(-)的運算,這種運算符便稱爲一元運算符。Java的運算符主要有以下幾類:賦值運算符、算術運算符、關係運算符、邏輯運算符、複合賦值運算符等。下面分別做介紹。

2.4.1 賦值運算符與賦值表達式
當需要爲各種不同的變量賦值時,就必須使用賦值運算符“=”,這裏的“=”不是“等於”的意思,而是“賦值”的意思,例如:   
a1=3;
這個語句的作用是將整數3賦值給變量a1。使變量a1此時擁有的值爲3。再看下面的語句:
a1=a1+1;
大家知道,這種表示方法在數學上是行不通的,但作爲賦值語句,在以後的程序設計中是經常用到的,把a1加1後的結果再賦值給變量a1存放,若此語句執行前a1的值爲3,則本語句執行後,a1的值將變爲4。
有時我們經常使用這樣的語句:   
j=i=3;
這種語句系統的處理方式是:首先將整數3賦值給變量i,然後將(i=3)這部分內容轉換成賦值表達式,這個表達式的值(運算結果)也是3,最後再將表達式(i=3)的值賦值給j,因此,此時變量j的值爲3。

2.4.2 算術運算符與算術表達式
算術運算符大多用於數學運算,如表2ˉ8所示。

例2.4.1 算術運算符在程序中的使用。

本程序的運行結果如下: 

如果要進行加1或者減1的運算,可以使用一種快捷運算符,或者又稱爲遞增和遞減運算符:“++”和“--”。
前面已經說過:如果在程序中定義了變量i,在程序運行時想讓它的值增1,可使用語句:
i=i+1;
此時若使用另外的語句:   
i++;
則兩句語句的意義是相同的。
遞增運算符是一元運算符,它可以被放在運算對象的後面(i++),也可以被放在運算對象的前面(++i)。必須注意的是這兩者所代表的意義是不一樣的,i++的執行原則是先引用,後增1。遞增(遞減)運算符運算和執行原則如表2ˉ9所示。 

例如對如下的語句塊:  
int i=3;
System.out.println(i++);
此時的輸出結果爲3,待輸出結束後,i才增值爲4。
++i的執行原則則相反:是先增1,後引用。如對如下的語句塊:     
int i=3;
System.out.println(++i);
此時的輸出結果爲4,i先增值爲4,然後輸出結果。

2.4.3 關係運算符與關係表達式
關係運算實際上是“比較運算”,將兩個值進行比較,判斷比較的結果是否符合給定的條件,Java的關係運算符都是二元運算符,由Java關係運算符組成的關係表達式的計算結果爲布爾類型(即邏輯型),具體的關係運算符和其說明和執行原則如表2ˉ10所示。

在Java中,任何數據類型的數據(包括基本數據類型和複合數據類型)都可以通過“==”與“!=”來比較表達式的結果是否成立。
關係運算符經常與邏輯運算符一起使用,作爲程序流控制語句的判斷條件。

2.4.4 邏輯運算符與邏輯表達式
邏輯運算符經常用來連接關係表達式,對關係表達式的值進行邏輯運算,因此邏輯運算符的運算對象必須是邏輯型數據,其邏輯表達式的運行結果也是邏輯型數據。Java的邏輯運算符有三種,具體表示與運算規則如表2ˉ11與表2ˉ12所示。

邏輯運算符運算規則:  

邏輯表達式往往可用於表示比較複雜的條件,例如要判別某一年(year)是否是閏年,閏年的判別條件是:能被4整除但不能被100整除,或者能被400整除。可以用一個邏輯表達式來表示:

當year爲某一整數值時,上述表達式值爲true,則year年爲閏年,否則爲非閏年。
例2.4.2 關係運算符與邏輯運算符在程序中的使用。

根據關係運算符與邏輯運算符的運算規則,本程序的運行結果爲true。
在Java中,運算符&&和||的運算規則遵循一種在電工學中稱爲“短路”的執行方式,即對於邏輯表達式的求解中,並不是所有的邏輯運算符都被執行,只是在必須執行下一個邏輯運算符才能求出表達式的結果時,才執行該運算符。例如:
1)a&&b&&c:如果a非真,則不再判別b和c,直接輸出表達式的值爲false;若a爲真,則判別b,若b非真,則不再判別c,直接輸出表達式的值爲false;當a、b同時爲真,才判別c的真假。
2)a||b||c:如果a爲真,則不再判別b和c,直接輸出表達式的值爲true;若a非真,則判別b,若b爲真,則不再判別c,直接輸出表達式的值爲true;當a、b同時非真,才判別c的真假。 

2.4.5 複合賦值運算符
複合賦值運算符是一種將算術運算符與賦值運算符相結合的一種運算符,這些運算符的說明及使用方式如表2ˉ13所示。 

例2.4.3 複合賦值運算符在程序中的簡單使用。

本程序的運行結果是:

2.4.6 其他運算符
1.位運算符

位運算符用來對二進制位進行操作,其具體說明如表2ˉ14所示。


說明:對於位移運算符“>>”與“<<”,假設現有數15,其二進制值爲1111,向右移動後形式爲0111,故轉換爲十進制數爲7;向左移動後形式爲11110,故轉換爲十進制數爲30。它們被稱爲算術位移運算符。
2.條件運算符:?:
條件運算符是三元運算符,其使用的語法形式爲:    
<表達式>?e1:e2
其中表達式值的類型爲邏輯型,若表達式的值爲真,則返回e1的值;表達式的值爲非真,則返回e2的值。
設有下列代碼語句:   
int a=3,b=6,c;
c=(a>b)?1:2;
則執行後c的值爲2。

2.4.7 運算符的優先級與結合性
Java語言規定了運算符的優先級與結合性。優先級是指同一表達式中多個運算符被執行的次序,在表達式求值時,先按運算符的優先級別由高到低的次序執行,例如,算術運算符中採用“先乘除後加減”。如果在一個運算對象兩側的優先級別相同,則按規定的“結合方向”處理,稱爲運算符的“結合性”。Java規定了各種運算符的結合性,如算術運算符的結合方向爲“自左至右”,即先左後右。Java中也有一些運算符的結合性是“自右至左”的。
例如:
當a=3;b=4時
若k=a-5+b,則k=2(先計算a-5,再計算-2+b)
若k=a+=b-=2,則k=5(先計算b-=2,再計算a+=2)
表2ˉ15列出了各個運算符優先級別的排列和其結合性,數字越小的表示優先級別越高,初學者在使用運算符時,請經常參考下列表格。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章