elasticsearch入門系列">elasticsearch入門系列
688
2022-05-29
一、運(yùn)算符
1. 算術(shù)運(yùn)算符
1.1 運(yùn)算符和表達(dá)式(了解)
運(yùn)算符:對(duì)常量或者變量進(jìn)行操作的符號(hào)
表達(dá)式:用運(yùn)算符把常量或者變量連接起來符合java語法的式子就可以稱為表達(dá)式。
不同運(yùn)算符連接的表達(dá)式體現(xiàn)的是不同類型的表達(dá)式。
舉例說明:
int a = 10; int b = 20; int c = a + b;
+:是運(yùn)算符,并且是算術(shù)運(yùn)算符。
a + b:是表達(dá)式,由于+是算術(shù)運(yùn)算符,所以這個(gè)表達(dá)式叫算術(shù)表達(dá)式。
1.2 算術(shù)運(yùn)算符(應(yīng)用)
注意:
/和%的區(qū)別:兩個(gè)數(shù)據(jù)做除法,/取結(jié)果的商,%取結(jié)果的余數(shù)。
整數(shù)操作只能得到整數(shù),要想得到小數(shù),必須有浮點(diǎn)數(shù)參與運(yùn)算。
int a = 10; int b = 3; System.out.println(a / b); // 輸出結(jié)果3 System.out.println(a % b); // 輸出結(jié)果1
1.3 字符的“+”操作(理解)
char類型參與算術(shù)運(yùn)算,使用的是計(jì)算機(jī)底層對(duì)應(yīng)的十進(jìn)制數(shù)值。需要我們記住三個(gè)字符對(duì)應(yīng)的數(shù)值:
‘a(chǎn)’ – 97 a-z是連續(xù)的,所以’b’對(duì)應(yīng)的數(shù)值是98,'c’是99,依次遞加
‘A’ – 65 A-Z是連續(xù)的,所以’B’對(duì)應(yīng)的數(shù)值是66,'C’是67,依次遞加
‘0’ – 48 0-9是連續(xù)的,所以’1’對(duì)應(yīng)的數(shù)值是49,'2’是50,依次遞加
// 可以通過使用字符與整數(shù)做算術(shù)運(yùn)算,得出字符對(duì)應(yīng)的數(shù)值是多少 char ch1 = 'a'; System.out.println(ch1 + 1); // 輸出98,97 + 1 = 98 char ch2 = 'A'; System.out.println(ch2 + 1); // 輸出66,65 + 1 = 66 char ch3 = '0'; System.out.println(ch3 + 1); // 輸出49,48 + 1 = 49
算術(shù)表達(dá)式中包含不同的基本數(shù)據(jù)類型的值的時(shí)候,整個(gè)算術(shù)表達(dá)式的類型會(huì)自動(dòng)進(jìn)行提升。
提升規(guī)則:
byte類型,short類型和char類型將被提升到int類型,不管是否有其他類型參與運(yùn)算。
整個(gè)表達(dá)式的類型自動(dòng)提升到與表達(dá)式中最高等級(jí)的操作數(shù)相同的類型
等級(jí)順序:byte,short,char --> int --> long --> float --> double
例如:
byte b1 = 10; byte b2 = 20; // byte b3 = b1 + b2; // 該行報(bào)錯(cuò),因?yàn)閎yte類型參與算術(shù)運(yùn)算會(huì)自動(dòng)提示為int,int賦值給byte可能損失精度 int i3 = b1 + b2; // 應(yīng)該使用int接收 byte b3 = (byte) (b1 + b2); // 或者將結(jié)果強(qiáng)制轉(zhuǎn)換為byte類型 ------------------------------- int num1 = 10; double num2 = 20.0; double num3 = num1 + num2; // 使用double接收,因?yàn)閚um1會(huì)自動(dòng)提升為double類型
1.4 字符串的“+”操作(理解)
當(dāng)“+”操作中出現(xiàn)字符串時(shí),這個(gè)”+”是字符串連接符,而不是算術(shù)運(yùn)算。
System.out.println("itheima"+ 666); // 輸出:itheima666
在”+”操作中,如果出現(xiàn)了字符串,就是連接運(yùn)算符,否則就是算術(shù)運(yùn)算。當(dāng)連續(xù)進(jìn)行“+”操作時(shí),從左到右逐個(gè)執(zhí)行。
System.out.println(1 + 99 + "年黑馬"); // 輸出:100年黑馬 System.out.println(1 + 2 + "itheima" + 3 + 4); // 輸出:3itheima34 // 可以使用小括號(hào)改變運(yùn)算的優(yōu)先級(jí) System.out.println(1 + 2 + "itheima" + (3 + 4)); // 輸出:3itheima7
1.5 數(shù)值拆分(應(yīng)用)
需求:
鍵盤錄入一個(gè)三位數(shù),將其拆分為個(gè)位,十位,百位,打印在控制臺(tái)
示例代碼:
import java.util.Scanner; public class Test { public static void main(String[] args) { // 1:使用Scanner鍵盤錄入一個(gè)三位數(shù) Scanner sc = new Scanner(System.in); System.out.println("請(qǐng)輸入一個(gè)三位數(shù)"); int num = sc.nextInt(); // 2:個(gè)位的計(jì)算:數(shù)值 % 10 int ge = num % 10; // 3:十位的計(jì)算:數(shù)值 / 10 % 10 int shi = num / 10 % 10; // 4:百位的計(jì)算:數(shù)值 / 100 int bai = num / 100; // 5:將個(gè)位, 十位, 百位拼接上正確的字符串, 打印即可 System.out.println("整數(shù)"+num+"個(gè)位為:" + ge); System.out.println("整數(shù)"+num+"十位為:" + shi); System.out.println("整數(shù)"+num+"百位為:" + bai); } }
2.自增自減運(yùn)算符(理解)
注意事項(xiàng):
++和-- 既可以放在變量的后邊,也可以放在變量的前邊。
單獨(dú)使用的時(shí)候, ++和-- 無論是放在變量的前邊還是后邊,結(jié)果是一樣的。
參與操作的時(shí)候,如果放在變量的后邊,先拿變量參與操作,后拿變量做++或者–。
參與操作的時(shí)候,如果放在變量的前邊,先拿變量做++或者–,后拿變量參與操作。
最常見的用法:?jiǎn)为?dú)使用。
int i = 10; i++; // 單獨(dú)使用 System.out.println("i:" + i); // i:11 int j = 10; ++j; // 單獨(dú)使用 System.out.println("j:" + j); // j:11 int x = 10; int y = x++; // 賦值運(yùn)算,++在后邊,所以是使用x原來的值賦值給y,x本身自增1 System.out.println("x:" + x + ", y:" + y); // x:11,y:10 int m = 10; int n = ++m; // 賦值運(yùn)算,++在前邊,所以是使用m自增后的值賦值給n,m本身自增1 System.out.println("m:" + m + ", m:" + m); // m:11,m:11
練習(xí):
int x = 10; int y = x++ + x++ + x++; System.out.println(y); // y的值是多少? /* 解析,三個(gè)表達(dá)式都是++在后,所以每次使用的都是自增前的值,但程序自左至右執(zhí)行,所以第一次自增時(shí),使用的是10進(jìn)行計(jì)算,但第二次自增時(shí),x的值已經(jīng)自增到11了,所以第二次使用的是11,然后再次自增。。。 所以整個(gè)式子應(yīng)該是:int y = 10 + 11 + 12; 輸出結(jié)果為33。 */ 注意:通過此練習(xí)深刻理解自增和自減的規(guī)律,但實(shí)際開發(fā)中強(qiáng)烈建議不要寫這樣的代碼!小心挨打!
3.賦值運(yùn)算符(應(yīng)用)
賦值運(yùn)算符的作用是將一個(gè)表達(dá)式的值賦給左邊,左邊必須是可修改的,不能是常量。
注意:
擴(kuò)展的賦值運(yùn)算符隱含了強(qiáng)制類型轉(zhuǎn)換。
short s = 10; s = s + 10; // 此行代碼報(bào)出,因?yàn)檫\(yùn)算中s提升為int類型,運(yùn)算結(jié)果int賦值給short可能損失精度 s += 10; // 此行代碼沒有問題,隱含了強(qiáng)制類型轉(zhuǎn)換,相當(dāng)于 s = (short) (s + 10);
4.關(guān)系運(yùn)算符(應(yīng)用)
關(guān)系運(yùn)算符有6種關(guān)系,分別為小于、小于等于、大于、等于、大于等于、不等于。
注意事項(xiàng):
關(guān)系運(yùn)算符的結(jié)果都是boolean類型,要么是true,要么是false。
千萬不要把“==”誤寫成“=”,"==“是判斷是否相等的關(guān)系,”="是賦值。
int a = 10; int b = 20; System.out.println(a == b); // false System.out.println(a != b); // true System.out.println(a > b); // false System.out.println(a >= b); // false System.out.println(a < b); // true System.out.println(a <= b); // true // 關(guān)系運(yùn)算的結(jié)果肯定是boolean類型,所以也可以將運(yùn)算結(jié)果賦值給boolean類型的變量 boolean flag = a > b; System.out.println(flag); // 輸出false
5.邏輯運(yùn)算符(應(yīng)用)
邏輯運(yùn)算符把各個(gè)運(yùn)算的關(guān)系表達(dá)式連接起來組成一個(gè)復(fù)雜的邏輯表達(dá)式,以判斷程序中的表達(dá)式是否成立,判斷的結(jié)果是 true 或 false。
//定義變量 int i = 10; int j = 20; int k = 30; //& “與”,并且的關(guān)系,只要表達(dá)式中有一個(gè)值為false,結(jié)果即為false System.out.println((i > j) & (i > k)); //false & false,輸出false System.out.println((i < j) & (i > k)); //true & false,輸出false System.out.println((i > j) & (i < k)); //false & true,輸出false System.out.println((i < j) & (i < k)); //true & true,輸出true System.out.println("--------"); //| “或”,或者的關(guān)系,只要表達(dá)式中有一個(gè)值為true,結(jié)果即為true System.out.println((i > j) | (i > k)); //false | false,輸出false System.out.println((i < j) | (i > k)); //true | false,輸出true System.out.println((i > j) | (i < k)); //false | true,輸出true System.out.println((i < j) | (i < k)); //true | true,輸出true System.out.println("--------"); //^ “異或”,相同為false,不同為true System.out.println((i > j) ^ (i > k)); //false ^ false,輸出false System.out.println((i < j) ^ (i > k)); //true ^ false,輸出true System.out.println((i > j) ^ (i < k)); //false ^ true,輸出true System.out.println((i < j) ^ (i < k)); //true ^ true,輸出false System.out.println("--------"); //! “非”,取反 System.out.println((i > j)); //false System.out.println(!(i > j)); //!false,,輸出true
6.短路邏輯運(yùn)算符(理解)
在邏輯與運(yùn)算中,只要有一個(gè)表達(dá)式的值為false,那么結(jié)果就可以判定為false了,沒有必要將所有表達(dá)式的值都計(jì)算出來,短路與操作就有這樣的效果,可以提高效率。同理在邏輯或運(yùn)算中,一旦發(fā)現(xiàn)值為true,右邊的表達(dá)式將不再參與運(yùn)算。
邏輯與&,無論左邊真假,右邊都要執(zhí)行。
短路與&&,如果左邊為真,右邊執(zhí)行;如果左邊為假,右邊不執(zhí)行。
邏輯或|,無論左邊真假,右邊都要執(zhí)行。
短路或||,如果左邊為假,右邊執(zhí)行;如果左邊為真,右邊不執(zhí)行。
int x = 3; int y = 4; System.out.println((x++ > 4) & (y++ > 5)); // 兩個(gè)表達(dá)都會(huì)運(yùn)算 System.out.println(x); // 4 System.out.println(y); // 5 System.out.println((x++ > 4) && (y++ > 5)); // 左邊已經(jīng)可以確定結(jié)果為false,右邊不參與運(yùn)算 System.out.println(x); // 4 System.out.println(y); // 4
7.三元運(yùn)算符(理解)
三元運(yùn)算符語法格式:
關(guān)系表達(dá)式 ? 表達(dá)式1 : 表達(dá)式2;
解釋:?jiǎn)柼?hào)前面的位置是判斷的條件,判斷結(jié)果為boolean型,為true時(shí)調(diào)用表達(dá)式1,為false時(shí)調(diào)用表達(dá)式2。其邏輯為:如果條件表達(dá)式成立或者滿足則執(zhí)行表達(dá)式1,否則執(zhí)行第二個(gè)。
舉例:
int a = 10; int b = 20; int c = a > b ? a : b; // 判斷 a>b 是否為真,如果為真取a的值,如果為假,取b的值
8.三元運(yùn)算符案例(應(yīng)用)
需求:
一座寺廟里住著三個(gè)和尚,已知他們的身高分別為150cm、210cm、165cm,請(qǐng)用程序?qū)崿F(xiàn)獲取這三個(gè)和尚的最高身高。
public class OperatorTest02 { public static void main(String[] args) { //1:定義三個(gè)變量用于保存和尚的身高,單位為cm,這里僅僅體現(xiàn)數(shù)值即可。 int height1 = 150; int height2 = 210; int height3 = 165; //2:用三元運(yùn)算符獲取前兩個(gè)和尚的較高身高值,并用臨時(shí)身高變量保存起來。 int tempHeight = height1 > height2 ? height1 : height2; //3:用三元運(yùn)算符獲取臨時(shí)身高值和第三個(gè)和尚身高較高值,并用最大身高變量保存。 int maxHeight = tempHeight > height3 ? tempHeight : height3; //4:輸出結(jié)果 System.out.println("maxHeight:" + maxHeight); } }
面向?qū)ο缶幊?/p>
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。