Java運算子
- 運算子
- 算術運算子
- 除號:/
- 取模/取余:%
- 增量賦值運算子:+= -= *= /= %=
- 自增/自減運算子:++ -\-
- 關系運算子:== != < > <= >=
- 邏輯運算子:&& || !
- 邏輯與 &&
- 邏輯或 ||
- 邏輯非 !
- 短路求值
- 位運算子 & | ~ ^
- 按位與 &
- 按位或 |
- 按位取反 ~
- 按位異或 ^
- 移位運算子
- 左移運算子:<<
- 右移運算子:>>
- 無符號右移:>>>
- 條件運算子:運算式1 ? 運算式2 : 運算式3
- 運算子的優先級
運算子
算術運算子
基本的四則運算子:+ - * / %
這里我們應該注意到的是:除號 / 和取模 %
除號:/
int / int 的結果還是 int ,需要用 double 來計算,0 不能做除數,不然會報錯,
int a = 1;
int b = 2;
System.out.println(a / b);

因為都是整型,除的結果還是 int 所以就是 0 ,當 0 做除數的時候,就會報錯:

所以防止報錯,我們一定不要拿 0 做除數,
取模/取余:%
就是求余數,不僅僅可以對 int 求模,還能對 double 求模,例如對 double 求模:
System.out.println(11.5 % 2.0);

增量賦值運算子:+= -= *= /= %=
這里只是拿 5 來舉例
+= 就是加了X 就相當于a = a + 5;
-= 就是相當于 a = a - 5;
*= 就是相當于 a = a * 5;
/= 就是相當于 a = a / 5;
%= 就是相當于 a = a % 5;
自增/自減運算子:++ --
++ 就是加 1 ,-- 就是減 1 ,
這里有前置和后置的區別:
1 前置++:就是自身先 + 1,然后再被使用,
2 后置++:就是自身先使用,然后再 + 1 ,
代碼如下:
int a = 10;
int b = ++a;
System.out.println(b);
int c = a++;
System.out.println(c);
System.out.println(a);

因為 b 就是前置 ++ 然后賦值,所以 a 的值先變成 11 ,然后再賦給 b ,c 就是后置 ++ ,所以 a 的值是先賦給 c ,然后 a 再加1 ,所以 a 就是 12 ,
關系運算子:== != < > <= >=
== 用來表示相等
!= 用來表示不相等
< 用來表示小于
> 用來表示大于
<= 用來表示小于等于
>= 用來表示小于等于
要注意的是,這 6 種關系運算子的回傳值都是 boolean 型別,
代碼演示:
int a = 10;
int b = 20;
System.out.println(a == b);
System.out.println(a != b);
System.out.println(a < b);
System.out.println(a > b);
System.out.println(a <= b);
System.out.println(a >= b);

邏輯運算子:&& || !
&&:邏輯與,符號兩邊的運算元都為 true, 結果為 true, 否則結果為 false,
||:邏輯或,符號兩邊的運算元都為 false, 結果為 false, 否則結果為 true
! :邏輯非, 運算元為 true, 結果為 false; 運算元為 false, 結果為 true (這是個單目運算子, 只有一個運算元),
邏輯與 &&
代碼:
int a = 10;
int b = 20;
int c = 30;
System.out.println(a < b && b < c);
因為運算子兩邊都為真,所以結果就是 true ,

邏輯或 ||
代碼:
int a = 10;
int b = 20;
int c = 30;
System.out.println(a < b || b < c);

這里的結果是 true 但其實只判斷了一次,因為這是邏輯或,兩個運算式只要一個為真就行了,因為左邊的已經為真了,所以右邊的就不判斷了,
邏輯非 !
就是把布爾型別變得相反,代碼:
int a = 10;
int b = 20;
System.out.println(!(a < b));

因為原來是 true 在使用非運算子之后,就變成 false 了,
短路求值
短路求值就是上面邏輯或說的那樣,只求一個運算式就好了,
邏輯與:如果左邊運算式為假,就不判斷右邊的了,
邏輯或:如果左邊運算式為真,就不判斷右邊的了,
位運算子 & | ~ ^
按位與 &
如果兩個二進制位都是 1, 則結果為 1, 否則結果為 0 ,舉例:
int a = 10;
int b = 20;
System.out.println(a & b);

按位與的結果是 0 ,因為 10 的二進制位是 01010 ,20 的二進制位是 10100 ,所以按位與的結果就是 00000 ,結果就是 0 ,這里說的是有效位,所以根據規則,結果就是 0 ,
按位或 |
如果兩個二進制位都是 0, 則結果為 0, 否則結果為 1 ,舉例:
int a = 10;
int b = 20;
System.out.println(a | b);

按位或的結果是 30, 根據計算規則,就得到了 30 ,因為 10 的二進制位是 01010 ,20 的二進制位是 10100 ,所以按位或的結果就是 11110 結果就是 30 ,
按位取反 ~
就是把二進制位 1 變成 0 ,0 變成 1 ,
按位異或 ^
就是找不同,一樣的地方,結果是 0 ,不一樣的地方,結果是 1 ,
移位運算子
移位運算子移動的都是二進制位,
左移運算子:<<
最左側位不要了, 最右側補 0 ,代碼:
int a = 10;
a = a << 1;
System.out.println(a);

可以發現左移的結果是 20 ,原來是 10,所以我們就可以推斷出:左移 n 位,就是原來的值乘 2^n 方,
右移運算子:>>
最右側位不要了, 最左側補符號位 (正數補0, 負數補1) ,代碼:
int a = 10;
a = a >> 1;
System.out.println(a);

可以發現右移的結果是 5 ,原來是 10,所以我們就可以推斷出:右移 n 位,就是原來的值除 2^n 方,
無符號右移:>>>
最右側位不要了, 不管是正數還是負數,都補 0 ,
條件運算子:運算式1 ? 運算式2 : 運算式3
當 運算式1 的值為 true 時, 整個運算式的值為 運算式2 的值; 當 運算式1 的值為 false 時, 整個運算式的值為 運算式3 的值,例如求兩個數的最大值,代碼示例:
int a = 10;
int b = 20;
int max = a > b ? a : b;
System.out.println(max);

因為 a 小于 b ,所以 運算式1 為假,所以回傳 運算式3 的值,就是 20 ,
運算子的優先級
在 Java 當中,沒必要去看運算子的優先級,只要按照我們的邏輯去加括號就好了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/321215.html
標籤:java
