本章目錄
3.1 運算符(一)
(1)運算符,顧名思義就是用於計算的符號。
(2)Java 語言中的運算符
①按功能分爲:賦值運算符、算術運算符、關係運算符和邏輯運算符
②按操作數的個數分類:單目運算符、雙目運算符、三目運算符
(3)使用運算符時,要關注下列三個方面:
①運算符的目:運算符能連接操作數的個數稱爲運算符的目
②運算符的優先級:優先級是指在一個表達式中出現多個不同運算符,在進行計算時運算符執行的先後次序。
③運算符的結合方向:結合方向又稱爲結合性,是指當一個操作數連接兩個同一優先級的運算符時,按運算符的結合性所規定的結合方向處理。
3.1.1 賦值運算符
賦值運算符爲“=”,是Java語言中最簡單,也是最常用的運算符。
賦值運算用於將賦值運算符右側表達式的結果賦予賦值運算符左側的變量。
int english = 92;
賦值運算符具有自右向左的結合性
int a,b,c; //同時聲明三個變量
a = b = c = 1; //自右向左賦值
注意:賦值運算符的左側只能爲一個變量,而右側可以是變量、常量或表達式。
3.1.2 算數運算符
運算符 |
功能 |
示例 |
+ |
加法運算 |
表達式1+2計算結果爲3 |
- |
減法運算 |
表達式2-1計算結果爲1 |
* |
乘法運算 |
表達式2*2計算結果爲4 |
/ |
除法運算 |
表達式4/2計算結果爲2 |
% |
模運算 |
表達式5%2計算結果爲1 |
注意:
如果參與運算的數值都是整數,則“/”完成的是整除運算,如5/2 的值是2 而非2.5。
模運算“%”是進行除法運算後取餘數,參與運算的必須是整數。
示例:使用算術運算符實現兩個數字的基本四則運算。
int num1 = 5;
int num2 = 3;
int result;
result = num1+num2; // 加法運算
System.out.printf("%d + %d的結果是 %d\n",num1,num2,result);
result = num1-num2; // 減法運算
System.out.printf("%d - %d的結果是 %d\n",num1,num2,result);
result = num1*num2; // 乘法運算
System.out.printf("%d * %d 的結果是 %d\n",num1,num2,result);
result = num1/num2; // 除法運算
System.out.printf("%d / %d的結果是 %d\n",num1,num2,result);
result = num1%num2; // 求餘運算
System.out.printf("%d %% %d的結果是 %d\n",num1,num2,result);
(1)在算術運算符中,還存在兩個較爲獨特的單目運算符,分別是自增和自減
++變量名 或 變量名++
--變量名 或 變量名--
(2)自增和自減運算符分別用於使變量值自增1或自減1。
3.1.3 複合運算符
在Java語言中,可以將賦值運算符和算術運算符進行組合,從而形成複合賦值運算符,用於對變量自身執行算術運算。
運算符 |
功能 |
示例 |
+= |
加法運算 |
int a=10; a+=2 等效於a=a+2; a=12 |
-= |
減法運算 |
int a=10; a-=2 等效於a=a-2; a=8 |
*= |
乘法運算 |
int a=10; a*=2 等效於a=a*2; a=20 |
/= |
除法運算 |
int a=10; a/=2 等效於a=a/2; a=5 |
%= |
模運算 |
int a=10; a%=2 等效於a=a%2; a=0 |
當需要對變量自身進行算術運算時,建議使用複合賦值運算符,效率要遠高於算術運算符。
複合賦值運算符的結合性自右向左。
例如:
int a=5;
a+=a+=5;// 等效於a=a+(a+5)
執行完畢後,變量a 的值爲15。
3.1.4 實踐練習(一)
3.1.5 實踐練習(二)
3.2 運算符(二)
3.2.1 關係運算符
關係運算符用於比較兩個變量或表達式的值的大小關係。
在Java 中,關係運算結果值爲bool 類型,包括“true”或“false”。
運算符 |
功能 |
示例 |
> |
比較大於關係 |
表達式2>1 計算結果爲“True” |
< |
比較小於關係 |
表達式2<1 計算結果爲“False” |
>= |
比較大於等於關係 |
表達式2>=1 計算結果爲“True” |
<= |
比較小於等於關係 |
表達式2<=1 計算結果爲“False” |
== |
比較相等關係 |
表達式2==1 計算結果爲“False” |
!= |
比較不相等關係 |
表達式2!=1 計算結果爲“True” |
示例:使用關係運算符實現兩個數字之間的大小比較。
int num1 = 88;
int num2 = 100;
boolean result;
result = num1>num2;
System.out.printf("%d > %d的結果爲:%b\n",num1,num2,result);
result = num1>=num2;
System.out.printf("%d >= %d的結果爲:%b\n",num1,num2,result);
result = num1<num2;
System.out.printf("%d < %d的結果爲:%b\n",num1,num2,result);
result = num1==num2;
System.out.printf("%d == %d的結果爲:%b\n",num1,num2,result);
result = num1!=num2;
System.out.printf("%d != %d的結果爲:%b\n",num1,num2,result);
3.2.2 邏輯運算符
使用關係運算符可以比較程序中兩個值的大小關係,但在程序中經常需要從多個比較關係中得到綜合判斷的結果。
運算符 |
功能 |
示例 |
&& |
與運算,即同時成立,缺一不可 |
a>b&&c>d:只有左右兩個表達式的值都爲true, 整個結果才爲True。只要有一個表達式爲false,則整個表達式爲False |
|| |
或運算, 即兩者中有一個成立即可 |
a>b||c>d:左右兩個表達式中只要有一個成立就爲true,只有兩個都爲false才爲false |
! |
非運算,取反 |
!(a>b):如果表達式a>b 爲false,則進行取反運算後爲true;如果表達式a>b爲true,則進行取反運算後爲false |
示例:要想進入微軟亞洲研究院工作,必須是研究生畢業,且從事軟件開發兩年以上的工作經驗
如果要描述入職微較亞洲研究院的條件,則僞代碼爲:
(學歷>=碩士)&&(工作年限>=兩年)
如果入職微軟亞洲研究院的條件變爲“學歷爲碩士以上或工作年限兩年以上”,則僞代碼爲:
(學歷>=碩士)(工作年限>=兩年)
如果入職微軟亞洲研究院的條件變爲“學歷不能爲碩士以下”,則僞代碼爲:
!(學歷<碩士)
int degree, workyear;
degree = 3; //degree 1代表本科,2代表碩士,3代表博士
workyear = 3;
boolean result=(degree>=2)&&(workyear>=2);
System.out.println("博士並且工作3年的入職評判結果爲:"+result);
degree = 2;
workyear = 1;
result = (degree >= 2) && (workyear >= 2);
System.out.println ("碩士並且工作1年的入職評判結果爲:" + result);
degree = 1;
workyear = 1;
result = (degree >= 2) && (workyear >= 2);
System.out.println("本科並且工作1年的入職評判結果爲:" + result);
3.2.3 三母運算符
三目運算符可以快速的幫我們實現條件的判斷,語法如下:
布爾表達式?表達式1:表達式2
條件表達式的結果由布爾表達式決定,如果布爾表達式的值爲true,則返回表達1的值,否則返回表達式2的值。
示列:使用三目運算符實現成年與否的判斷
Scanner sc = new Scanner(System.in);
System.out.println("請輸入您的年齡");
int age = sc.nextInt();
System.out.println(age>=18?"成年":"未成年");
注意:
- 條件運算符的優先級低於關係運算符和算術運算符,高於賦值運算符。
- JAVA中條件運算表達式中的關係表達式值的類型必須爲布爾類型,只能是true或false。
- 條件運算符的結合性是右結合性。
3.2.4 實踐練習
3.3 運算符優先級和表達式
3.3.1 表達式
表達式和運算符:
計算機程序在處理數據時會進行大量的計算,而數據的運算則需要藉助運算符和表達式來完成。
表達式是指由操作數和運算符組成的用於完成某種運算功能的語句
其中Y、X、Z、10 稱爲操作數,=、*、+ 稱爲運算符。
3.3.2 運算符和優先級
在Java語言中進行表達式求值時,同一優先級的運算符,運算次序由結合性決定,不同優先級的運算符,運算次序由優先級決定。
優先級 |
運算符 |
結合性 |
1 |
() |
從左到右 |
2 |
!、++、-- |
從右到左 |
3 |
* 、/、 % |
從左到右 |
4 |
+ 、- |
從左到右 |
5 |
> 、<、 >=、 <= |
從左到右 |
6 |
==、 != |
從左到右 |
7 |
&& |
從左到右 |
8 |
|| |
從左到右 |
9 |
= 、+=、 -=、 *=、 /=、 %= |
從右到左 |
3.3.3 實踐練習
3.4 數據類型轉換
- 不同類型的數據在進行混合運算時需要進行類型轉換,即將不同類型的數據轉換爲同種類型的數據後再進行計算。
- 針對於值類型的數據,類型轉換主要包括以下兩種形式:自動類型轉換、強制類型轉換
3.4.1 自動類型轉換
條件1:滿足自動類型轉換的條件
兩種類型要兼容:數值類型(整型和浮點型)互相兼容
目標類型大於源類型: 例如:double 型大於 int 型
條件2:操作數向大操作數類型轉換,計算結果也爲表達式中大操作數的類型
示例:實現自動類型轉換
//自動轉換示例3
int a3 = 10;
long b3 = 1000;
long result3 = a3 + b3;
System.out.println(result3);
//自動轉換示例4
byte a4 = 10;
char b4 = 'a'; //字母a對應爲97
//a4、b4將轉換爲int類型,最終運算的結果爲int類型
int result4 = a4 + b4;
System.out.println(result4);
3.4.2 強制類型轉換
強制類型轉換可以將大數據類型轉化爲小數據類型(如將double轉換爲int),在轉換過程中會丟失數據的精度。
語法:
(目標數據類型) 表達式;
示例:求半徑爲5的圓的周長,結果取整數
public class TypeTran {
public static void main(String[] args) {
int r = 5;
int round = (int)(2*3.14*r);//求圓的周長,強制類型轉換後會丟失精度
System.out.println("半徑爲"+r+"的圓的周長爲:"+round);
}
}
3.4.3 實踐練習(一)
3.4.4 實踐練習(二)
總結:
- 在Java中,運算符按功能分爲:賦值運算符、算術運算符、關係運算符和邏輯運算符。
- 關係運算符運算後的結果爲boolean類型。
- 邏輯運算符可以連接多個關係運算符,它的操作數與結果均爲boolean類型。
- 數據類型轉換分爲自動類型轉換和強制類型轉換。
- 數據類型轉換是爲方便不同類型的數據之間進行計算,發生自動類型轉換有一定的條件。