運算符和表達式
想要更多面試題和學習資料的可以私聊聯系我,大家一起交流學習!
1. 算數運算
1.1. 使用%運算符
Java算術運算符除了通常的加(+)、減(-)、乘(*)、除(\)之外,還包括取模運算(%)和自增(++)及自減(--)運算。+,-,*,/ 比較簡單,實驗一下即可。
取模運算(%)意為取余數,只能適用於整數及char類型。示例代碼如下所示:
- // 輸出255除以8所得的余數。
- int n = 225;
- System.out.println(n % 8); //結果為1
// 輸出255除以8所得的余數。
int n = 225;
System.out.println(n % 8); //結果為1
1.2. 使用“++”和“--”運算符
Java的自增運算符(++)和自減運算符(--)繼承自C++,可以使變量的值加1或減1,但其寫在變量前和變量后有不同的效果:
- 如果寫在變量前,表示在使用這個變量之前加1或減1
- 如果寫在變量后,表示這個變量使用完之后再加1或減1
示例代碼如下所示:
- int a = 10, b = 20;
- int c1 = a++; // 先將a的值賦給c1,然后a再自加
- int c2 = ++b; // 先將b的值自加,然后再賦給c2
- System.out.println("a=" + a + ", b=" + b + ", c1=" + c1 + ", c2=" + c2);
- // 輸出的結果為: a=11, b=21, c1=10, c2=21
int a = 10, b = 20;
int c1 = a++; // 先將a的值賦給c1,然后a再自加
int c2 = ++b; // 先將b的值自加,然后再賦給c2
System.out.println("a=" + a + ", b=" + b + ", c1=" + c1 + ", c2=" + c2);
// 輸出的結果為: a=11, b=21, c1=10, c2=21
2. 關系運算
2.1. 使用關系運算符
Java中的關系運算符用於判斷數據之間的大小關系,包括大於(>)、小於(<)、大於等於(>=)、小於等於(<=)、等於(==)、不等於(!=) 六個運算符。
在實際應用中常常使用,假設現在想實現轉帳功能,輸入轉帳的金額,需要判斷所轉帳的金額是否大於當前帳戶的金額,那結果只有兩個,大於或不大於,在java語言中,使用boolean類型來表示這種是否的狀態,如果關系成立為true,否則為false。示例代碼如下所示:
- int max = 10;
- int num = 9;
- boolean b1 = max > 15;
- boolean b2 = num%2 == 1;
- System.out.println(b1); // 結果為false
- System.out.println(b2); // 結果為true
int max = 10;
int num = 9;
boolean b1 = max > 15;
boolean b2 = num%2 == 1;
System.out.println(b1); // 結果為false
System.out.println(b2); // 結果為true
3. 邏輯運算
3.1. 邏輯運算
前面的關系運算符是用於比較兩個數值之間的大小關系的, 而邏輯運算符是用來進行邏輯運算的,它是建立在關系運算的基礎之上的。當兩個關系運算需要兼顧考慮時,可以使用邏輯運算符。
邏輯運算符包括:與(&&)、或(||)和非(!)。參與邏輯運算的變量或表達式都是boolean類型,運算結果也為boolean類型。邏輯運算規則如下圖 - 4所示:
圖- 4
通過分析可以看出:
- 當變量b1和變量b2同時為true時,&&表達式為true。
- 當變量b1和變量b2有一個為true時,||表達式為true。
- !只有一個表達式,當b1為true時,!b1為false,b1為false時,!b1為true。
3.2. 使用“&&”運算符
兩個boolean變量參與“&&”運算時,只有當兩個變量均為true的時,運算結果才為true,否則結果為false。示例代碼如下所示:
- int score = 80;
- boolean b = score >= 60 && score < 90;
- System.out.println(b);
- // 結果為true,因為score的值同時滿足大於等於60和小於90這兩個條件,邏輯表達式“score >= 60”和“score < 90”的結果均為true,所以&&運算的結果即為true。
int score = 80;
boolean b = score >= 60 && score < 90;
System.out.println(b);
// 結果為true,因為score的值同時滿足大於等於60和小於90這兩個條件,邏輯表達式“score >= 60”和“score < 90”的結果均為true,所以&&運算的結果即為true。
3.3. 使用“||”運算符
兩個boolean變量參與“||”運算時,當兩個變量有一個為true時,結果即為true,只有當兩個變量均為false時結果為false。示例代碼如下所示:
- boolean flag = true;
- int n = 200;
- boolean b1 = flag || (n >= 0 && n < 100);
- System.out.println(b1);
- // 結果為true,上面這段代碼中,表達式“flag || (n >= 0 && n < 100)”的含義是:當flag為true或者n在0到100之間(n大於等於0且小於100)時,結果為true,否則為false。根據flag和n的值,最后的運算結果為true。
boolean flag = true;
int n = 200;
boolean b1 = flag || (n >= 0 && n < 100);
System.out.println(b1);
// 結果為true,上面這段代碼中,表達式“flag || (n >= 0 && n < 100)”的含義是:當flag為true或者n在0到100之間(n大於等於0且小於100)時,結果為true,否則為false。根據flag和n的值,最后的運算結果為true。
3.4. 使用“!”運算符
“!”運算相對簡單,只有一個boolean變量參與運算,運算的值與該變量相反,變量為true時結果為false,變量為false是結果為true。示例代碼如下所示:
- boolean flag = true;
- int n = 200;
- boolean b = !flag || (n >= 0 && n < 100);
- System.out.println(b);
- // 結果為false,上面這段代碼中,表達式“!flag || (n >= 0 && n < 100)”的含義是:當flag為false或者n在0到100之間(n大於等於0且小於100)時,結果為true,否則為false。根據flag和n的值,最后的運算結果為false。
boolean flag = true;
int n = 200;
boolean b = !flag || (n >= 0 && n < 100);
System.out.println(b);
// 結果為false,上面這段代碼中,表達式“!flag || (n >= 0 && n < 100)”的含義是:當flag為false或者n在0到100之間(n大於等於0且小於100)時,結果為true,否則為false。根據flag和n的值,最后的運算結果為false。
3.5. 關於“短路邏輯”的問題
Java邏輯運算中的&&和||有短路的特性,當第一個關系表達式就可以判斷出整個表達式的結果時,就不會再去判斷后面的第二個表達式。
- 對於“&&”,當第一個操作數為false時,將不會判斷第二個操作數,因為此時無論第二個操作數是什么最后的結果一定是false;
- 對於“||”,當第一個操作數為true時,將不會判斷第二個操作數,因為此時無論第二個操作數為何,最后的運算結果一定是true。
示例代碼如下所示:
- int i = 100, j = 200;
- boolean b1 = (i > j) && (i++ > 100);
- System.out.println(b1); // 結果為:false
- System.out.println(i); // 結果為:100,發生短路,i++不會被執行
- boolean b2 = i > 0 || j++ > 200;
- System.out.println(b2); // 結果為:true
- System.out.println(j); // 結果為:200,發生短路,j++不會被執行