JavaSE03-運算子&分支語句
1.運算子
1.1 算術運算子
1.1.1 運算子和表示式
運算子:對常量或者變數進行操作的符號
表示式:用運算子把常量或者變數連線起來符合java語法的式子就可以稱為表示式。
不同運算子連線的表示式體現的是不同型別的表示式。
1 int a = 1; 2 3 int b = 2; 4 5 int c = a + b;
+:是運算子,並且是算術運算子。 a + b:是表示式,由於+是算術運算子,所以這個表示式叫算術表示式。
1.1.2 算術運算子
符號 | 作用 | 說明 |
+ | 加 | 略 |
- | 減 | 略 |
* | 乘 | 略 |
/ | 除 | 略 |
% | 取餘 | 獲取兩數做除法後的餘數 |
注意: /和%的區別:兩個資料做除法,/取結果的商,%取結果的餘數。 整數操作只能得到整數,要想得到小數,必須有浮點數參與運算。
1 int a = 10; 2 3 int b = 3; 4 5 System.out.println(a / b); // 輸出結果3 6 7 System.out.println(a % b); // 輸出結果1
1.1.3 字元的“+”操作
char型別參與算術運算,使用的是計算機底層對應的十進位制數值。需要我們記住三個字元對應的數值:
'a' -- 97 a-z是連續的,所以'b'對應的數值是98,'c'是99,依次遞加
'A' -- 65 A-Z是連續的,所以'B'對應的數值是66,'C'是67,依次遞加
'0' -- 48 0-9是連續的,所以'1'對應的數值是49,'2'是50,依次遞加
或者也可以只記住兩個值,大寫A+32就是小寫a
算術表示式中包含不同的基本資料型別的值的時候,整個算術表示式的型別會自動進行提升。
提升規則: byte型別,short型別和char型別將被提升到int型別,不管是否有其他型別參與運算。
整個表示式的型別自動提升到與表示式中最高等級的運算元相同的型別
等級順序:byte,short,char --> int --> long --> float --> double
tips:
1、正是由於上述原因,所以在程式開發中我們很少使用byte或者short型別定義整數。也很少會使用char型別定 義字元,而使用字串型別,更不會使用char型別做算術運算。
2、當“+”操作中出現字串時,這個”+”是字串連線符,而不是算術運算。在”+”操作中,如果出現了字串,就是連線運算子,否則就是算術運算。當連續進行“+”操作時,從左到右逐個執行。
3、對於大量字串連線,會產生嚴重的效能問題,為了解決這一問題,可以在有大量字串連線的程式碼中使用StringBuffer或者StringBuilder。
1.2賦值運算子
符號 | 作用 | 說明 |
= | 賦值 | a=1,將1賦值給變數a |
+= | 加後賦值 | a+=b,將a+b的值給a,等同於a=a+b |
-= | 減後賦值 | a-=b,將a-b的值給a,等同於a=a-b |
*= | 乘後賦值 | a*=b,將a*b的值給a,等同於a=a*b |
/= | 除後賦值 | a/=b,將a/b的值給a,等同於a=a/b |
%= | 取餘後賦值 | a%=b,將a%b的值給a,等同於a=a%b |
1.3 自增自減
符號 | 作用 | 說明 |
++ | 自增 | a++,即a=a+1 |
-- | 自減 | a--,即a=a-1 |
注意事項:
++和-- 既可以放在變數的後邊,也可以放在變數的前邊。
單獨使用的時候, ++和-- 無論是放在變數的前邊還是後邊,結果是一樣的。
參與操作的時候,如果放在變數的前邊,先拿變數做++或者--,後拿變數參與操作;如果放在變數的後邊,先拿變數參與操作,後拿變數做++或者--。
1.4 關係運算符
符號 | 作用 | 說明 |
== | 判斷是否相等 | 成立返回true,不成立返回false |
> | 判斷a是否大於b | 同上 |
>= | 判斷a是否大於等於b | 同上 |
< | 判斷a是否小於b | 同上 |
<= | 判斷a是否小於等於b | 同上 |
!= | 判斷是否不相等 | 同上 |
注意事項:
1、關係運算符的結果都是boolean型別,要麼是true,要麼是false。
2、不要混淆“==”與“=”,一個是判斷,一個是賦值。
1.5 邏輯運算子
符號 | 作用 | 說明 |
& | 與 | a & b,a與b是否都是true,成立返回true,不成立返回false |
| | 或 | a | b,a與b是否有一個是true,成立返回true,不成立返回false |
^ | 異或 | a ^ b,a與b是否結果不同,成立返回true,不成立返回false |
! | 非 | !a ,結果與a是否完全相反,成立返回true,不成立返回false |
短路邏輯運算子
符號 | 作用 | 說明 |
&& | 短路與 | a && b,a與b是否都是true,成立返回true,不成立返回false,具有短路效果 |
|| | 短路或 | a || b,a與b是否有一個是true,成立返回true,不成立返回false,具有短路效果 |
短路效果:在邏輯與運算中,只要有一個表示式的值為false,那麼結果就可以判定為false了,沒有必要將所有表示式的值都 計算出來,短路與操作就有這樣的效果,可以提高效率。同理在邏輯或運算中,一旦發現值為true,右邊的表示式 將不再參與運算。
1.6 三元運算子
關係表示式 ? 表示式1 : 表示式2;
解釋:問號前面的位置是判斷的條件,判斷結果為boolean型,為true時呼叫表示式1,為false時呼叫表示式2。其 邏輯為:如果條件表示式成立或者滿足則執行表示式1,否則執行第二個。
舉例:判斷pwd和passwd是否相等,相等返回true,不相等返回false。
1 public class Demo { 2 public static void main(String[] args) { 3 //1:定義兩個變數,此處僅作展示,請不要使用弱口令密碼。 4 int pwd = 123456; 5 int passwd = 123123; 6 //2:用三元運算子實現數值的判斷,相同,返回true,否則,返回false。 7 boolean b = pwd == passwd ? true : false; 8 //3:輸出結果 9 System.out.println("b:" + b); 10 } 11 }
2. 資料輸入
我們可以通過 Scanner 類來獲取使用者的輸入。
使用步驟如下:
1、導包。Scanner 類在java.util包下,所以需要將該類匯入。導包的語句需要定義在類的上面。
1 import java.util.Scanner
2、建立Scanner物件。
1 Scanner sc = new Scanner(System.in);
3、接收資料
1 String str = sc.nextLine();
3. 流程控制語句
在一個程式執行的過程中,各條語句的執行順序對程式的結果是有直接影響的。所以,我們必須清楚每條語句的執 行流程。而且,很多時候要通過控制語句的執行順序來實現我們想要的功能。
3.1 流程控制語句分類
順序結構、分支結構(if, switch)、迴圈結構(for, while, do…while)
3.2 順序結構
順序結構是程式中最簡單最基本的流程控制,沒有特定的語法結構,按照程式碼的先後順序,依次執行,程式中大多 數的程式碼都是這樣執行的。
3.3 分支結構之if語句
1.if語句
1 if(a == b){ 2 return "ok"; 3 }
判斷a與b是否相等,相等執行花括號內語句,不相等什麼都不做。
2.if……else
1 if(a == b){ 2 return "ok"; 3 }else{ 4 return "no!God!no!" 5 }
判斷a與b是否相等,相等執行if下花括號內語句,不相等執行else下花括號內語句。
3.if……else if……else
1 if(a == b){ 2 return "ok"; 3 }else if(a < b){ 4 return "no bad" 5 }else{ 6 return "no!God!no!" 7 }
判斷a與b是否相等,相等執行if下花括號內語句,不相等則判斷else if中的判斷,如果為true執行else if下花括號的語句。注意,else if語句可以有多個,如果都無法通過判斷,則執行else下花括號內語句。