Java複習(3)運算子和表示式
運算子主要是指進行特定操作的符號。如:+。
表示式是指用運算子連線起來的式子叫做表示式。如:20+5,a+b。
Java世界中運算子主要分為以下幾類:算術運算子、賦值運算子、比較運算子、邏輯運算子和三元運算子。
一、 算術運算子
加(+):四則運算的加法
減(-):四則運算的劍法
乘(*):四則運算的乘法
除(/):四則運算的除法
取模(%):常說的求餘數
注意事項:
- 一旦運算當中有不同型別的資料,那麼結果將會是資料類型範圍大的那種。
- 只有對於整數的除法來說,取模運算才有餘數的意義。
- 在進行運算時,首先計算得到表示式的結果,然後在進行後續操作。
- 四則運算的加號對於char型別來說,在計算之前,char型別會被提升為int型別,然後在進行計算。
-
對於字串String型別來說,加號代表字串連線操作。並且任何資料型別和字串進行連線操作,結果都會變成字串。
可以看一下程式碼示例:public class TestOperator { public static void main(String[] args){ //兩個常量之間的數學運算 System.out.println(20+30); //兩個變數之間的數學運算 int a = 20; int b = 5; System.out.println(a-b); //並且變數和常量之間可以混合使用 System.out.println(a*10); int x = 10; int y = 3; //因為x和y都是整數,除數的結果也是整數。所以結果會進行截斷。 int result1 = x/y; System.out.println(result1); int result2 = x%y; System.out.println(result2); //浮點數也可以進行運算 double result3 = x + 2.5; System.out.println(result3); } }
算術運算子還有兩種特殊的運算子,就是自增運算子(++)、自減運算子(--)。
基本含義:
自增運算子讓變數的值增加1,自減運算子是讓變數的值減1。
使用格式:
寫在變數名稱前,或者寫在變數名稱之後。如:++num或num++。
使用方式: - 單獨使用:不和其他任何操作混合,自己獨立稱為一個步驟。
- 混合使用: 和其他操作混合,例如與賦值混合,或者與列印操作混合等。
兩種使用方式區別: - 在單獨使用的時候,前++和後++沒有任何區別。也就是說++num和num++結果是完全一樣的。
-
在混合使用的時候,有重大區別:
A. 如果是前++,那麼變數馬上加1,然後拿著結果進行使用。可以稱作,先加後用。
B. 如果是後++,那麼首先使用變數本來的數值,然後在讓變數加1,可以稱作,先用後加。
注意事項:
只有變數才能使用自增、自減運算子,常量不可用。
請看以下示例:public class TestPlus { public static void main(String[] args) { //字串型別的變數基本使用 //資料型別 變數名稱 = 資料值; String str1 = "Hello"; System.out.println(str1); System.out.println("Hello" + "World"); String str2 = "Java"; System.out.println(str2 + 20); //優先順序問題 System.out.println(str2 + 20 + 30); //自增自減 int num1 = 10; System.out.println(num1); ++num1;//單獨使用,前++ System.out.println(num1); num1++;//單獨使用,後++ System.out.println(num1); int num2 = 20; //混合使用,前++,變數馬上變為21,然後列印輸出 System.out.println(++num2); System.out.println(num2); int num3 = 30; //混合使用,後++,先使用變數原值30,列印輸出,然後變數加1,變為31. System.out.println(num3++); System.out.println(num3); int num4 = 40; //混合使用,前--,變數馬上變為39,然後賦值result1 int result1 = --num4; System.out.println(result1); System.out.println(num4); int num5 =50; //混合使用,後--,先使用變數原值50,賦值result2,然後變數減1,變為49. int result2 = num5--; System.out.println(result2); System.out.println(num5); int x = 10; int y = 20; int result3 = ++x + y--; System.out.println(result3); System.out.println(x); System.out.println(y); } }
二、 賦值運算子
賦值運算子分為兩種:
一是基本賦值運算子:就是一個等號“=”,代表將右側的資料交給左側的變數。
二是複合賦值運算子:
+=: 例如 a += 1 相當於 a = a + 1
-=: 例如 b -= 4 相當於 b = b - 4
=: 例如 c = 5 相當於 c = c * 5
/=: 例如 d /= 6 相當於 d = d / 6
%=: 例如 e %= 7 相當於 e = e % 7
注意事項: - 只有變數才能使用賦值運算子,常量不能進行賦值。
-
複合賦值運算子其中隱含了一個強制型別轉換。
請看示例:public class TestEqual{ public static void main(String[] args) { int a = 10; a += 5; System.out.println(a); int x = 10; x %= 3; System.out.println(x); byte num = 30; //num += 5 相當於 num = num +5; //也就是byte = byte + int; //右邊表示式會先把byte自動轉換稱為int,最後進行強制轉換成byte. //所以複合賦值運算子幫我們做了一個強制型別轉換 num += 5; System.out.println(num); } }
三、 比較運算子
== 比較符號兩邊資料是否相等,相等結果就是true。
< 比較符號左邊的資料是否小於右邊的資料,如果小於,結果就是true。比較符號左邊的資料是否大於右邊的資料,如果大於,結果就是true。
<= 比較符號左邊的資料是否小於等於右邊的資料,如果小於等於,結果就是true
= 比較符號左邊的資料是否大於等於右邊的資料,如果大於等於,結果就是true。
!= 比較符號兩邊資料是否相等,不相等結果就是true。
注意事項:
- 比較運算子的結果一定是一個boolean值,成立就是true,不成立就是false。
- 如果進行多次判斷,不能連著寫。
public class TestCompare { public static void main(String[] args) { System.out.println(10>5); iint num1 = 10; int num2 = 15; System.out.println(num1 < num2); System.out.println(num1 >= 30); System.out.println(num2 <= 50); System.out.println(num2 <= 15); System.out.println(num2 == 15); System.out.println(num1 != 15); //java不支援連著進行比較,可以使用下節的邏輯比較符進行。 //System.out.println(4 < num1 < 20); } }
四、 邏輯運算子
與 && 全都是true,才是true; 否則就是false
或 || 至少一個是true, 就是true; 全都是false,才是false
非 ! 本來是true,變成false;本來是false,變成true。
注意事項:
- 邏輯運算子只能用於Boolean值。
- 與、或需要左右各自有一個Boolean值,但是取反只要有唯一的一個Boolean值即可。
- 與、或兩種運算子,如果有多個條件,可以連續寫。
- 與、或具有短路效果:如果根據左邊已經可以判斷得到最終結果,那麼右邊的程式碼將不再執行,從而節省效能。
五、 三元運算子
Java中根據資料的多少可以分為:
一元運算子: 只需要一個數據就可以進行操作的運算子。例如:取反!、自增++、自減--
二元運算子: 需要兩個資料才可以進行操作的運算子。例如:加減乘除
三元運算子: 需要三個資料才可以進行操作的運算子。
格式: 資料型別 變數名稱 = 條件判斷 ? 表示式A : 表示式B
流程:
首先判斷條件是否成立:
如果成立為true,那麼將表示式A的值賦給左側的變數
如果不成立為false,那麼將表示式B的值賦給左側的變數
注意事項:
- 必須同時保證表示式A和表示式B都符合左側資料型別的要求。
-
三元運算子的結果必須被使用。
public class TestThreeVar { public static void main(String[] args) { int a = 10; int b = 20; int max; //判斷a>b是否成立,如果成立將a的值賦給max,如果不成立將b的值賦給max. max = a > b ? a : b; System.out.println(max); //兩個表示式的值必須同時符合左側資料型別的要求。 //int result = 3 > 4 ? 2.4 : true; //並且三元表示式不能直接使用 //a > b ? a : b } }