- Java程序設(shè)計(jì)案例教程
- 許敏 史熒中
- 2533字
- 2020-08-07 16:35:16
2.4 運(yùn)算符和表達(dá)式
Java語(yǔ)言中對(duì)數(shù)據(jù)的處理過(guò)程稱為運(yùn)算,用于表示運(yùn)算的符號(hào)稱為運(yùn)算符,它由1至3個(gè)字符結(jié)合而成。雖然運(yùn)算符是由數(shù)個(gè)字符組合而成,但Java將其視為一個(gè)符號(hào)。參加運(yùn)算的數(shù)據(jù)稱為操作數(shù),按操作數(shù)的個(gè)數(shù)來(lái)劃分運(yùn)算符的類型有:一元運(yùn)算符(如++)、二元運(yùn)算符(如*)和三元運(yùn)算符(如?:)。按功能劃分運(yùn)算符的類型有:算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、布爾運(yùn)算符、位運(yùn)算符、賦值運(yùn)算符、條件運(yùn)算符和其他運(yùn)算符。
2.4.1 算術(shù)運(yùn)算符
算術(shù)運(yùn)算符主要完成算術(shù)運(yùn)算。常見(jiàn)的算術(shù)運(yùn)算符如表2-5所示。
表2-5 Java中的算術(shù)運(yùn)算符
使用算術(shù)運(yùn)算符時(shí)需要注意如下幾個(gè)方面:
進(jìn)行二元運(yùn)算時(shí),如果兩個(gè)操作數(shù)的類型不同,將會(huì)首先自動(dòng)進(jìn)行類型轉(zhuǎn)換。
對(duì)兩個(gè)整數(shù)進(jìn)行除法操作時(shí),所得結(jié)果為整數(shù),小數(shù)部分將被丟棄。
增量、減量運(yùn)算符只能用于變量,不能用于常量和表達(dá)式。
Java對(duì)加運(yùn)算符“+”進(jìn)行了擴(kuò)展,以用于字符串的連接,如"abd"+"de",得到的結(jié)果為新串"abcde"。
【例2.2】算術(shù)運(yùn)算符測(cè)試示例。
程序運(yùn)行結(jié)果如圖2-2所示。
圖2-2 算術(shù)運(yùn)算符運(yùn)算結(jié)果
2.4.2 關(guān)系運(yùn)算符
關(guān)系運(yùn)算是比較兩個(gè)數(shù)據(jù)之間的大于、小于或等于關(guān)系的運(yùn)算,結(jié)果返回邏輯值(true或false)。在一個(gè)比較運(yùn)算符兩邊的數(shù)據(jù)類型應(yīng)該一致。Java中提供6種關(guān)系運(yùn)算符,如表2-6所示。
表2-6 Java中的關(guān)系運(yùn)算符
整數(shù)或浮點(diǎn)數(shù)的關(guān)系運(yùn)算是比較兩個(gè)數(shù)的大小,字符型數(shù)據(jù)的關(guān)系運(yùn)算是比較其Unicode碼的大小,boolean值只能進(jìn)行==或!=兩種比較運(yùn)算。
Java中,任何數(shù)據(jù)類型的數(shù)據(jù)(包括基本類型和引用類型)都可以通過(guò)==或!=來(lái)比較是否相等。關(guān)系運(yùn)算符常與布爾邏輯運(yùn)算符一起使用,作為流程控制語(yǔ)句的判斷條件。
關(guān)系運(yùn)算符的優(yōu)先級(jí)別低于算術(shù)運(yùn)算符,關(guān)系運(yùn)算符的執(zhí)行順序自左至右。
【例2.3】關(guān)系運(yùn)算符使用示例。
圖2-3 關(guān)系運(yùn)算符運(yùn)算結(jié)果
2.4.3 布爾運(yùn)算符
布爾邏輯運(yùn)算符主要完成操作數(shù)的布爾邏輯運(yùn)算,結(jié)果為布爾值。Java中的布爾邏輯運(yùn)算符共有6種,如表2-7所示。
表2-7 Java中的布爾邏輯運(yùn)算符
&&和&的運(yùn)算結(jié)果是一樣的,只有當(dāng)兩個(gè)操作數(shù)都為真時(shí),結(jié)果為真。兩者的區(qū)別在于,&&也稱為短路與,具有短路運(yùn)算功能,即若運(yùn)算符左端的表達(dá)式為假時(shí),則整個(gè)表達(dá)式的值已經(jīng)確定,運(yùn)算符右端的表達(dá)式將不需要被計(jì)算。而&不存在短路運(yùn)算,在任何情況下都要計(jì)算兩邊的表達(dá)式。同理,||和|的運(yùn)算結(jié)果也是一樣的,只有當(dāng)兩個(gè)操作數(shù)都為假時(shí),結(jié)果為假,但||具有短路運(yùn)算功能。&和|雖然不具有短路運(yùn)算功能,但可以在第2個(gè)表達(dá)式中增加額外的附加部分功能。當(dāng)異或運(yùn)算符^兩端表達(dá)式的值都為true或都為false時(shí),異或運(yùn)算的結(jié)果為假,而當(dāng)運(yùn)算符兩端表達(dá)式的值一個(gè)為true另一個(gè)為false時(shí),異或運(yùn)算的結(jié)果為真。
【例2.4】布爾運(yùn)算符使用示例。
圖2-4 布爾運(yùn)算符運(yùn)算結(jié)果
2.4.4 位運(yùn)算符
位運(yùn)算符是對(duì)以二進(jìn)制為單位的操作數(shù)的每一位進(jìn)行操作,但運(yùn)算的操作數(shù)和結(jié)果都是整型變量。但運(yùn)算符共有7種,如表2-8所示。
表2-8 Java中的位運(yùn)算符
【例2.5】位運(yùn)算符使用示例。
public class Example2_5{
public static void main(String[]args){
int a=3;
int b=4;
System.out.println(a|b);
System.out.println(a&b);
System.out.println(a^b);
System.out.println(a<<2);
System.out.println(b>>2);
}
}
2.4.5 賦值運(yùn)算符
圖2-5 位運(yùn)算符運(yùn)算結(jié)果
賦值運(yùn)算符“=”用來(lái)把一個(gè)表達(dá)式的值賦給一個(gè)變量。如果賦值運(yùn)算符兩邊的類型不一致,當(dāng)賦值運(yùn)算符右側(cè)表達(dá)式的數(shù)據(jù)類型比左側(cè)的數(shù)據(jù)類型優(yōu)先級(jí)別低時(shí),則打開(kāi)門進(jìn)入數(shù)據(jù)自動(dòng)被轉(zhuǎn)化為與左側(cè)相同的高級(jí)數(shù)據(jù)類型,然后將值賦給左側(cè)的變量。當(dāng)右側(cè)數(shù)據(jù)類型比左側(cè)數(shù)據(jù)類型優(yōu)先級(jí)高時(shí),則需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換,否則會(huì)發(fā)生錯(cuò)誤。
Java將算術(shù)運(yùn)算符或位運(yùn)算符進(jìn)行組合,形成復(fù)合賦值運(yùn)算符,以簡(jiǎn)化某些賦值語(yǔ)句。Java中的部分賦值運(yùn)算符如表2-9所示。
表2-9 Java中的賦值運(yùn)算符
2.4.6 條件運(yùn)算符
條件運(yùn)算符“?”是三元運(yùn)算符,它的一般形式為:
表達(dá)式1?表達(dá)式2:表達(dá)式3
其中表達(dá)式1的值必須為布爾類型,如果結(jié)果為true,則執(zhí)行表達(dá)式2,表達(dá)式2的執(zhí)行結(jié)果即為整個(gè)表達(dá)式的值。如果表達(dá)式1的結(jié)果為false,則執(zhí)行表達(dá)式3,表達(dá)式3的結(jié)果作為整個(gè)表達(dá)式的值。例如:
int max,a=20,b=15;
max=a>b?a:b;
執(zhí)行的結(jié)果為max=20。
2.4.7 運(yùn)算符優(yōu)先級(jí)
對(duì)表達(dá)式進(jìn)行運(yùn)算時(shí),要按照運(yùn)算符的優(yōu)先順序從高到低進(jìn)行,同級(jí)的運(yùn)算符則按從左到右的順序進(jìn)行。表2-10列出了Java中運(yùn)算符的優(yōu)先順序。
表2-10 Java中的運(yùn)算符優(yōu)先順序
2.4.8 表達(dá)式與語(yǔ)句
1.表達(dá)式
表達(dá)式是由操作數(shù)和運(yùn)算符按一定的語(yǔ)法形式組成的用來(lái)表達(dá)某種運(yùn)算或含義的符號(hào)序列。如3.5/2、2*(a+b)等都是有效的表達(dá)式。
每個(gè)表達(dá)式經(jīng)過(guò)運(yùn)算后都會(huì)產(chǎn)生一定確定的值,稱為表達(dá)式的值。表達(dá)式值的數(shù)據(jù)類型稱為表達(dá)式的數(shù)據(jù)類型,一個(gè)常量或一個(gè)變量是最簡(jiǎn)單的表達(dá)式。表達(dá)式可以作為一個(gè)整體,也可以看成一個(gè)操作數(shù)參與到其他運(yùn)算中,形成復(fù)雜的表達(dá)式。根據(jù)表達(dá)式中所使用的運(yùn)算符和運(yùn)算結(jié)果的不同,可以將表達(dá)式分為算術(shù)表達(dá)式、關(guān)系表達(dá)式、布爾表達(dá)式、條件表達(dá)式及字符串表達(dá)式等。
2.語(yǔ)句
Java程序由語(yǔ)句組成,每個(gè)語(yǔ)句是一個(gè)完整的執(zhí)行單元,以分號(hào)結(jié)尾。下列4種表達(dá)式后面加上分號(hào),就成了語(yǔ)句。
①賦值表達(dá)式。
②變量的++和--運(yùn)算。
③方法調(diào)用。
④對(duì)象創(chuàng)建表達(dá)式。
上述4類語(yǔ)句,稱為表達(dá)式語(yǔ)句。Java中除了表達(dá)式語(yǔ)句,還有聲明語(yǔ)句和流程控制語(yǔ)句。部分語(yǔ)句如:
int a; //聲明了int類型變量a
a=3+4; //賦值語(yǔ)句
a++; //相當(dāng)于a=a+1
System.out.println("HelloWorld!"); //方法調(diào)用語(yǔ)句
Person p=new Person(); //對(duì)象創(chuàng)建語(yǔ)句
其中,流程控制語(yǔ)句用來(lái)控制語(yǔ)句的執(zhí)行順序,方法調(diào)用語(yǔ)句和對(duì)象創(chuàng)建語(yǔ)句的用法將在后面詳細(xì)介紹。
【例2.6】表達(dá)式示例。
表達(dá)式運(yùn)算結(jié)果如圖2-6所示。
圖2-6 表達(dá)式運(yùn)算結(jié)果
3.語(yǔ)句塊和作用域
語(yǔ)句塊由一對(duì){}以及其中的語(yǔ)句組成,語(yǔ)句塊中的語(yǔ)句可以有零行(空語(yǔ)句塊)到多行,空語(yǔ)句塊留待以后再添加相關(guān)語(yǔ)句。任何可以使用語(yǔ)句的地方都可以使用語(yǔ)句塊,通常語(yǔ)句塊出現(xiàn)在流程控制、類的聲明、方法的聲明以及異常處理等場(chǎng)合。
每個(gè)語(yǔ)句塊定義了一個(gè)作用域,在作用域內(nèi)定義的變量是局部變量,局部變量只有在對(duì)應(yīng)的語(yǔ)句塊內(nèi)具有可見(jiàn)性。語(yǔ)句塊可以嵌套,每創(chuàng)建一個(gè)語(yǔ)句塊,就創(chuàng)建了一個(gè)新的作用域。作用域嵌套時(shí),外層作用域包含內(nèi)層作用域,即外層作用域定義的變量在內(nèi)層作用域中可見(jiàn);反之,內(nèi)層作用域定義的變量對(duì)外層作用域是不可見(jiàn)的。
【例2.7】變量i與局部變量j在不同作用域的可見(jiàn)性示例。
在上述程序中,一對(duì){}定義了一個(gè)作用域,在這個(gè)作用域內(nèi)定義的int型變量j在{}外不可見(jiàn)。因而當(dāng)語(yǔ)句j=5之前的注釋符號(hào)取消時(shí),將會(huì)發(fā)生錯(cuò)誤。
- scikit-learn Cookbook
- Mobile Web Performance Optimization
- 計(jì)算機(jī)圖形學(xué)編程(使用OpenGL和C++)(第2版)
- PyQt從入門到精通
- Getting Started with Python Data Analysis
- C語(yǔ)言程序設(shè)計(jì)
- Java Web程序設(shè)計(jì)任務(wù)教程
- 速學(xué)Python:程序設(shè)計(jì)從入門到進(jìn)階
- C# and .NET Core Test Driven Development
- Julia for Data Science
- Getting Started with Nano Server
- 編程可以很簡(jiǎn)單
- Android應(yīng)用開(kāi)發(fā)深入學(xué)習(xí)實(shí)錄
- 后臺(tái)開(kāi)發(fā):核心技術(shù)與應(yīng)用實(shí)踐
- 微課學(xué)人工智能Python編程