1. 算術運算符
概念
- "+" 加法運算符
- "-" 減法運算符
- "*" 乘法運算符
- "/" 除法運算符
- "%" 求余/取模運算符
實踐出真理
int ia = 5;
int ib = 16;
System.out.println(" + 運算符 : " + (ia + ib)); // 21
System.out.println(" - 運算符 : " + (ia - ib)); // -11
System.out.println(" * 運算符 : " + (ia * ib)); // 80
System.out.println(" / 運算符 : " + (ia / ib)); // 0
System.out.println(" % 運算符 : " + (ib % ia)); // 1
注意事項
//當兩個整數(shù)相除時結果只保留整數(shù)部分,丟棄小數(shù)部分
System.out.println((5 / 2)); // 2
//保留小數(shù)方式一:
System.out.println((double) 5 / 2);
System.out.println(5 / (double) 2);
System.out.println((double) 5 / (double) 2);
//無效處理
System.out.println((double) (5 / 2));
//方式二:
System.out.println(ia * 1.0 / ib); //通過 1.0 改變原來數(shù)據(jù)的類型
// 0 不能作除數(shù)
System.out.println(ia * 1.0 / 0); //可以通過編譯遂跟,運行時發(fā)生 java.lang.ArithmeticExcetion(算術異常/Infinity) by zero
System.out.println(ia * 1.0 / 0.0); // Infinity 無窮
System.out.println(0.0 / 0.0); // NaN(Not a Number)
應用
- 通過輸入一個正整數(shù)類型的秒數(shù)洪橘,通過拆分秒數(shù)后輸出x小時x分鐘x秒
System.out.println("請輸入一個正整數(shù): "); Scanner sc = new Scanner(System.in); int num = sc.nextInt(); int hour = num / 3600; int minute = num % 3600 / 60; int second = num % 60; System.out.println(num + "轉(zhuǎn)換為: " + hour + "小時" + minute + "分鐘" + second + "秒");
-
結果
轉(zhuǎn)換為時分秒.png
2. 字符串連接運算符"+"
- "+" 可以實現(xiàn)字符串的連接,同時可以實現(xiàn)字符串與其他數(shù)據(jù)類型“相連”
實踐出真理
此處代碼接拆分整數(shù)應用代碼
// 區(qū)分 "+"作為加法運算符與字符串連接符
// 當 "+" 兩邊的操作數(shù)中有一個操作數(shù)是字符串類型粱锐,則該"+"就被當做字符串連接符處理疫衩;否則當做 加法運算符處理
System.out.println(hour + minute + second); //當做 加法運算進行相加
System.out.println(hour + minute + second + "A"); //hour壮莹、minute翅帜、second進行算術相加后的數(shù)值當做字符串連接 "A"
System.out.println(hour + minute + "A" + second); //hour、minute進行加法運算后連接"A"后連接second
System.out.println(hour + "A" + minute + second);
System.out.println("A" + hour + minute + second);
System.out.println("A" + (hour + minute + second));
結果
連接運算符時.png
3. 關系/比較 運算符
概念
- ">" 是否大于
- ">=" 是否大于等于
- "<" 是否小于
- "<= " 是否小于等于
- "==" 是否等于
- "!=" 是否不等于
實踐出真理
int ia = 5;
int ib = 3;
System.out.println(ia < ib); //false
System.out.println(ia <= ib); //false
System.out.println(ia > ib); //true
System.out.println(ia >= ib); //true
System.out.println(ia == ib); //false
System.out.println(ia != ib); //true
應用示例
//判斷輸入的整數(shù)是否為負數(shù)
System.out.println("請輸入任意一個整數(shù)");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
boolean b = num >= 0;
System.out.println(b ? "輸入的數(shù)字為正整數(shù)" : "輸入的整數(shù)為負數(shù)");
結果
Snipaste_2021-06-05_18-34-16.png
4. 自增減運算符
- ++ 自增運算符 當前變量的數(shù)值 +1
- -- 自減運算符 當前變量的數(shù)值 -1
- C涝滴!只能用于變量 ,常數(shù)不可以V芗觥狭莱!
實踐出真理
int ia = 8;
System.out.println("當前ia的值為:"+ia); // 8
ia++;
System.out.println("自增運算符后的結果為: "+ia); // 9
++ia;
System.out.println("自增運算符后的結果為: "+ia); // 10
ia=10;
ia--;
System.out.println("自減運算符后的結果為: "+ia); // 9
--ia;
System.out.println("自增運算符后的結果為: "+ia); //8
System.out.println(ia++ + ++ia); // 18 (8+10)
i++ 與 ++i 的區(qū)別
- i++ 與 ++i 表示不同的含義,占用不同的內(nèi)存空間
- i++ 先賦值再運算
表示先讓 i 的數(shù)值作為整個表達式的最終結果概作,再讓 i 變量自身的數(shù)值 +1腋妙;
a = i++ 先賦值 a = i,后運算 i= i+1 ,最終的結果 a == i++ 運算前的數(shù)值 - ++i 先運算后賦值
表示先讓變量 i 的數(shù)值+1 讯榕,然后再讓變量的數(shù)值作為整個表達式的結果
a = ++i 先運算 i=i+1,后賦值 a = i,最終的結果為 i=i+1后的結果
i++ 與 ++i 執(zhí)行效率上的區(qū)別
- 總結
只有在必要時才使用后置操作符
因為前置操作需要做的工作更少骤素,只需要加1后返回加1后的結果即可。而后置操作符則必須先保存操作數(shù)原來的值愚屁,以便返回未加1之前的值作為操作的結果济竹。對于int對象和指針,編譯器可優(yōu)化掉這項額外工作霎槐。但是對于更多的復雜迭代器類型送浊,這種額外工作可能會花費更大代價
5. 邏輯運算符
概念
- && :and 表示邏輯 與 運算符
- 同真為真(true && true:結果為true),一假為假(false&&true:結果為false)
- 只有當兩個條件同為 true 時丘跌,結果才為:true
- || :or 表示邏輯 或 運算符
- 一真為真(true || true:結果為true)袭景,同假為假(false||false:結果為false)
- 只有當兩個條件同為 false時唁桩,結果才為:false
- ! :not 表示邏輯 非 運算符
- 取反 為 true 時結果為:false;為 false 時結果為 true
-
邏輯運算符
邏輯運算符 實踐出真理
//邏輯運算符的操作數(shù)均為 boolean 類型
boolean b1 = true
boolean b2 = false
System.out.println( b1 && b2) // false
System.out.println( b1 || b2) // true
System.out.println( !b1 ) // false
System.out.println( !b2) // true
短路特性
- && 邏輯與
若第一個表達式為 false耸棒,則結果為false:此時 跳過 第二個表達式int left = 3 int right = 5 boolean jude_and = left==right && (++right==6) System.out.println( "判斷的結果為:"+ jude_and +"/n"+ left +" ::: "+ right) // 判斷的結果為: false 3 5 // 此情況下第二個表達式 ++right==6 因為短路特性并沒有執(zhí)行
- || 邏輯或
若第一個表達式為 true 荒澡,則結果為 true:此時 跳過 第二個表達式int left = 3 int right = 5 boolean jude_and = left==3 && (++right==6) System.out.println( "判斷的結果為:"+ jude_and +"/n"+ left +" ::: "+ right) // 判斷的結果為: true 3 5 // 此情況下第二個表達式 ++right==6 因為短路特性并沒有執(zhí)行
應用示例
//判斷一個數(shù)字是否為三位數(shù)
System.out.println("請輸入一個正整數(shù): ");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
System.out.println(100<=num && num<=999);
運行截圖
是否為正整數(shù).png
6. 三目運算符(條件運算符)
概念
- 條件表達式?表達式1:表達式2
- 判斷條件表達式是否成立与殃,若成立則執(zhí)行表達式1单山,否則執(zhí)行表達式2
示例
-
判斷一個整數(shù)是否是三位數(shù)
System.out.println("請輸入一個正整數(shù): "); Scanner sc = new Scanner(System.in); int num = sc.nextInt(); System.out.println(num + (100<=num && num<=999?":是三位數(shù)":":不是三位數(shù)"));
運行結果:
是否是三位數(shù) -
查找最大的值
System.out.println("請輸入兩個正整數(shù): "); Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); int maxNum = a > b ? a : b; System.out.println("輸入的兩個整數(shù)中最大的是: " + maxNum);
運行結果 :
大的值
7. 賦值運算符
單一運算符
- "="
- 賦值運算符,將右邊的數(shù)據(jù)(值)賦值給 = 左邊的變量幅疼,覆蓋變量原來的值
- 賦值表達式本身也有值米奸,其本身值即為所賦之值
復合運算符
- "+=、-=爽篷、*=躏升、/="
實踐出真理
int testNumT = 5;
System.out.println("初始的值為: " + testNumT);
System.out.println("表達式的值為: " + (testNumT = 5)); //表達式的值為: 5
testNumT = 6;
System.out.println("單一賦值運算符 = :" + testNumT); //單一賦值運算符 = :6
System.out.println("---------復合運算符--------");
testNumT += 1;
System.out.println("復合運算符 += : " + testNumT); // 復合運算符 += :7
testNumT -= 1;
System.out.println("復合運算符 -= : " + testNumT); // 復合運算符 -= :6
testNumT *= 3;
System.out.println("復合運算符 *= : " + testNumT); // 復合運算符 *= :18
testNumT /= 6;
System.out.println("復合運算符 /= : " + testNumT); // 復合運算符 /= :3
補充內(nèi)容
- byte轉(zhuǎn)int
byte b = 3; //b=b+2; //錯誤: 從int轉(zhuǎn)換到byte可能會有損失 【byte】最大值為:127 //b= b+(byte)2; //錯誤: 從int轉(zhuǎn)換到byte可能會有損失 b += 2; //等價于 b= (byte)(b+2); System.out.println("當前b的值為: " + b);
- "="與 "==" 比較
int ia = 3; ia == 2; //判斷變量 ia 的數(shù)值是否等于3 2 == ia; //判斷2是否等于變量ia的數(shù)值 //以上兩種方式從結果看一樣的,推薦實際中采用第二種方式 ia = 2; //將2賦值給變量ia狼忱,覆蓋ia原來的值 //2 = ia //錯誤:意外的類型 2為數(shù)值,不可以當作變量使用
8. 移位運算符
概念
- 通過移動二進制位的操作
<< 左移運算符
- 將數(shù)據(jù)的二進制位向左移動一睁,右邊使用 0 補充
- 實踐出真理
byte b_Shift = 13; System.out.println(b_Shift << 1); //26 System.out.println(b_Shift << 2); //52
- 過程分析
13的二進制為: 0000 1101
向左移動一位后為: 0001 1010
0001 1010 轉(zhuǎn)換為十進制 : 0+12^1+0+123+1*24 = 0+2+0+8+16 = 26
應用(效果)
- 左移 1 位 相當于當前的 數(shù)值*2
- 左移 2 位 相當于當前的 數(shù)值*4
>> 右移運算符
- 將數(shù)據(jù)的二進制向右移動钻弄,左邊使用 符號位 補充
byte b_Shift = 13; System.out.println(b_Shift >> 1); //6 System.out.println(b_Shift >> 2); //3
應用(效果)
- 左移 1 位 相當于當前的 數(shù)值/2
- 左移 2 位 相當于當前的 數(shù)值/4
>>> 邏輯右移運算符
- 或稱為:無符號右移運算符(無符號右移等同于非負數(shù)時的 ">>")
- 將數(shù)據(jù)的二進制位向右移動,左邊使用 0 補充
9. 位運算符
概念
- & 按位 與 運算符 同 1 為 1 者吁,同 0 為 0 如果相對應位都是1窘俺,則結果為1,否則為0
- | 按位 或 運算符 -1 為 1 复凳,同 0 為 0 如果相對應位都是 0瘤泪,則結果為 0,否則為 1
- ~ 按位 取反 運算符 按照二進制位進行取反育八, 1 為 0 对途,0 為 1 按位取反運算符翻轉(zhuǎn)操作數(shù)的每一位,即0變成1髓棋,1變成0
- ^ 按位 異或 運算符 按照二進制進行異或運算 实檀,同為 0 ,不同為 1 如果相對應位值相同按声,則結果為0膳犹,否則為1
實踐
byte b1 = 11; // 0000 1011
byte b2 = 13; // 0000 1101
// & 按位 與
System.out.println(b1 & b2); // 9
// | 按位 或
System.out.println(b1 | b2); // 15
// ~ 按位 取反
System.out.println(~b1); // -12
// ^ 按位 異或
System.out.println(b1 ^ b2); // 6
10.運算符優(yōu)先級
-
最高優(yōu)先級的運算符在的表的最上面,最低優(yōu)先級的在表的底部
運算符優(yōu)先級 總結
- ()的優(yōu)先級極高
- =的優(yōu)先級極低