1.算術運算符: + - + - * / % (前)++ (後)++ (前)-- (後)-- +
【典型代碼】
//除號:/
int num1 = 12;
int num2 = 5;
int result1 = num1 / num2;
System.out.println(result1);//2
// %:取餘運算
//結果的符號與被模數的符號相同
//開發中,經常使用%來判斷能否被除盡的情況。
int m1 = 12;
int n1 = 5;
System.out.println("m1 % n1 = " + m1 % n1);
int m2 = -12;
int n2 = 5;
System.out.println("m2 % n2 = " + m2 % n2);
int m3 = 12;
int n3 = -5;
System.out.println("m3 % n3 = " + m3 % n3);
int m4 = -12;
int n4 = -5;
System.out.println("m4 % n4 = " + m4 % n4);
//(前)++ :先自增1,後運算
//(後)++ :先運算,後自增1
int a1 = 10;
int b1 = ++a1;
System.out.println("a1 = " + a1 + ",b1 = " + b1);
int a2 = 10;
int b2 = a2++;
System.out.println("a2 = " + a2 + ",b2 = " + b2);
int a3 = 10;
++a3;//a3++;
int b3 = a3;
//(前)-- :先自減1,後運算
//(後)-- :先運算,後自減1
int a4 = 10;
int b4 = a4--;//int b4 = --a4;
System.out.println("a4 = " + a4 + ",b4 = " + b4);
【特別說明的】
1.//(前)++ :先自增1,後運算
//(後)++ :先運算,後自增1
2.//(前)-- :先自減1,後運算
//(後)-- :先運算,後自減1
3.連接符:+:只能使用在String與其他數據類型變量之間使用。
2.賦值運算符:= += -= = /= %=
【典型代碼】
int i2,j2;
//連續賦值
i2 = j2 = 10;
//**************
int i3 = 10,j3 = 20;
int num1 = 10;
num1 += 2;//num1 = num1 + 2;
System.out.println(num1);//12
int num2 = 12;
num2 %= 5;//num2 = num2 % 5;
System.out.println(num2);
short s1 = 10;
//s1 = s1 + 2;//編譯失敗
s1 += 2;//結論:不會改變變量本身的數據類型
System.out.println(s1);
【特別說明的】
1.運算的結果不會改變變量本身的數據類型
2.
//開發中,如果希望變量實現+2的操作,有幾種方法?(前提:int num = 10;)
//方式一:num = num + 2;
//方式二:num += 2; (推薦)
//開發中,如果希望變量實現+1的操作,有幾種方法?(前提:int num = 10;)
//方式一:num = num + 1;
//方式二:num += 1;
//方式三:num++; (推薦)
3.比較運算符(關係運算符): == != > < >= <= instanceof
【典型代碼】
int i = 10;
int j = 20;
System.out.println(i == j);//false
System.out.println(i = j);//20
boolean b1 = true;
boolean b2 = false;
System.out.println(b2 == b1);//false
System.out.println(b2 = b1);//true
【特別說明的】
1.比較運算符的結果是boolean類型
2.> < >= <= :只能使用在數值類型的數據之間。
3. == 和 !=: 不僅可以使用在數值類型數據之間,還可以使用在其他引用類型變量之間。
Account acct1 = new Account(1000);
Account acct2 = new Account(1000);
boolean b1 = (acct1 == acct2);//比較兩個Account是否是同一個賬戶。
boolean b2 = (acct1 != acct2);//
4.邏輯運算符:& && | || ! ^
【典型代碼】
//區分& 與 &&
//相同點1:& 與 && 的運算結果相同
//相同點2:當符號左邊是true時,二者都會執行符號右邊的運算
//不同點:當符號左邊是false時,&繼續執行符號右邊的運算。&&不再執行符號右邊的運算。
//開發中,推薦使用&&
boolean b1 = true;
b1 = false;
int num1 = 10;
if(b1 & (num1++ > 0)){
System.out.println(“我現在在北京”);
}else{
System.out.println(“我現在在南京”);
}
System.out.println("num1 = " + num1);
boolean b2 = true;
b2 = false;
int num2 = 10;
if(b2 && (num2++ > 0)){
System.out.println("我現在在北京");
}else{
System.out.println("我現在在南京");
}
System.out.println("num2 = " + num2);
// 區分:| 與 ||
//相同點1:| 與 || 的運算結果相同
//相同點2:當符號左邊是false時,二者都會執行符號右邊的運算
//不同點3:當符號左邊是true時,|繼續執行符號右邊的運算,而||不再執行符號右邊的運算
//開發中,推薦使用||
boolean b3 = false;
b3 = true;
int num3 = 10;
if(b3 | (num3++ > 0)){
System.out.println("我現在在北京");
}else{
System.out.println("我現在在南京");
}
System.out.println("num3 = " + num3);
boolean b4 = false;
b4 = true;
int num4 = 10;
if(b4 || (num4++ > 0)){
System.out.println("我現在在北京");
}else{
System.out.println("我現在在南京");
}
System.out.println("num4 = " + num4);
【特別說明的】
1.邏輯運算符操作的都是boolean類型的變量。而且結果也是boolean類型
5.位運算符:<< >> >>> & | ^ ~
【典型代碼】
int i = 21;
i = -21;
System.out.println(“i << 2 :” + (i << 2));
System.out.println(“i << 3 :” + (i << 3));
System.out.println(“i << 27 :” + (i << 27));
int m = 12;
int n = 5;
System.out.println("m & n :" + (m & n));
System.out.println("m | n :" + (m | n));
System.out.println("m ^ n :" + (m ^ n));
【面試題】 你能否寫出最高效的2 * 8的實現方式?
答案:2 << 3 或 8 << 1
【特別說明的】
- 位運算符操作的都是整型的數據
- << :在一定範圍內,每向左移1位,相當於 * 2
:在一定範圍內,每向右移1位,相當於 / 2
典型題目:
1.交換兩個變量的值。
2.實現60的二進制到十六進制的轉換
6.三元運算符:(條件表達式)? 表達式1 : 表達式2
【典型代碼】
1.獲取兩個整數的較大值
2.獲取三個數的最大值
【特別說明的】
- 說明
① 條件表達式的結果爲boolean類型
② 根據條件表達式真或假,決定執行表達式1,還是表達式2.
如果表達式爲true,則執行表達式1。
如果表達式爲false,則執行表達式2。
③ 表達式1 和表達式2要求是一致的。
④ 三元運算符可以嵌套使用
凡是可以使用三元運算符的地方,都可以改寫爲if-else
反之,不成立。
3. 如果程序既可以使用三元運算符,又可以使用if-else結構,那麼優先選擇三元運算符。原因:簡潔、執行效率高。