JAVA----運算符

算術運算符

1.基本四則運算符 + - * / %
a) int / int 結果還是 int, 需要使用 double 來計算.

int a = 1;
int b = 2;
System.out.println(a / b);
// 結果爲 0

b) 0 不能作爲除數

int a = 1;
int b = 0;
System.out.println(a / b)
// 運行結果
Exception in thread "main" java.lang.ArithmeticException: / by zero
        at Test.main(Test.java:5)

c) % 表示取餘, 不僅僅可以對 int 求模, 也能對 double 來求模

System.out.println(11.5 % 2.0);
// 運行結果 1.5

2.增量賦值運算符 += -= *= /= %=

int a = 10;
a += 1; // 等價於 a = a + 1 System.out.println(a);

3.自增/自減運算符 ++ –

int a = 10;
int b = ++a;
System.out.println(b);
int c = a++;
System.out.println(c);

**結論:

  1. 如果不取自增運算的表達式的返回值, 則前置自增和後置自增沒有區別.
  2. 如果取表達式的返回值, 則前置自增的返回值是自增之後的值, 後置自增的返回值是自增之前的值.**

關係運算符

關係運算符主要有六個: == != < > <= >=

int a = 10;
int b = 20;
System.out.println(a == b);//false
System.out.println(a != b);//ture
System.out.println(a < b);//ture
System.out.println(a > b);//false
System.out.println(a <= b);//ture
System.out.println(a >= b);//false

注意: 關係運算符的表達式返回值都是 boolean 類型.

邏輯運算符(重點)

邏輯運算符主要有三個: && || !
注意: 邏輯運算符的操作數(操作數往往是關係運算符的結果)和返回值都是 boolean .

邏輯與 &&

int a = 10;
int b = 20;
int c = 30;
System.out.println(a < b && b < c);

規則: 兩個操作數都爲 true, 結果爲 true, 否則結果爲 false.

邏輯或 ||

int a = 10;
int b = 20;
int c = 30;
System.out.println(a < b && b < c);

規則: 兩個操作數都爲 false, 結果爲 false, 否則結果爲 true

邏輯非 !

int a = 10;
int b = 20;
System.out.println(!a < b);

規則: 操作數爲 true, 結果爲 false; 操作數爲 false, 結果爲 true(這是個單目運算符, 只有一個操作數).

短路求值

&& 和 || 遵守短路求值的規則.

System.out.println(10 > 20 && 10 / 0 == 0); // 打印false
System.out.println(10 < 20 || 10 / 0 == 0); // 打印 true

**結論:

  1. 對於 && , 如果左側表達式值爲 false, 則表達式的整體的值一定是 false, 無需計算右側表達式.
  2. 對於 ||, 如果左側表達式值爲 true, 則表達式的整體的值一定是 true, 無需計算右側表達式.**
    & 和 | (不推薦使用)
    & 和 | 如果操作數爲 boolean 的時候, 也表示邏輯運算. 但是和 && 以及 || 相比, 它們不支持短路求值.
 System.out.println(10 > 20 & 10 / 0 == 0); // 程序拋出異常 
 System.out.println(10 < 20 | 10 / 0 == 0); // 程序拋出異常

位運算符

Java 中對數據的操作的最小單位不是字節, 而是二進制位. 位運算符主要有四個:& | ~ ^
位操作表示 按二進制位運算. 計算機中都是使用二進制來表示數據的(01構成的序列), 按位運算就是在按照二進制位的每一位依次進行計算.

按位與 &: 如果兩個二進制位都是 1, 則結果爲 1, 否則結果爲 0.

 int a = 10;
int b = 20;
System.out.println(a & b);

進行按位運算, 需要先把 10 和 20 轉成二進制, 分別爲 1010 和 10100

按位或 |: 如果兩個二進制位都是 0, 則結果爲 0, 否則結果爲 1.

int a = 10;
int b = 20;
System.out.println(a | b);

注意: 當 & 和 | 的操作數爲整數(int, short, long, byte) 的時候, 表示按位運算, 當操作數爲 boolean 的時候, 表示邏輯運算.
按位取反 ~: 如果該位爲 0 則轉爲 1, 如果該位爲 1 則轉爲 0

 int a = 0xf;
System.out.printf("%x\n", ~a)

注意:

  1. 0x 前綴的數字爲 十六進制 數字. 十六進制可以看成是二進制的簡化表示方式. 一個十六進制數字對應 4 個二進 制位.
  2. 0xf 表示 10 進制的 15, 也就是二進制的 1111
  3. printf 能夠格式化輸出內容, %x 表示按照十六進制輸出. 4. \n 表示換行符

按位異或 ^: 如果兩個數字的二進制位相同, 則結果爲 0, 相異則結果爲 1.

int a = 0x1;
int b = 0x2;
System.out.printf("%x\n", a ^ b);

2.5 移位運算
移位運算符有三個: << >> >>>
都是按照二進制位來運算.

左移 <<: 最左側位不要了, 最右側補 0.

 int a = 0x10;
System.out.printf("%x\n", a << 1);
// 運行結果(注意, 是按十六進制打印的) 20

右移 >>: 最右側位不要了, 最左側補符號位(正數補0, 負數補1)

int a = 0x10;
System.out.printf("%x\n", a >> 1);
// 運行結果(注意, 是按十六進制打印的) 8
int b = 0xffff0000;
System.out.printf("%x\n", b >> 1);
// 運行結果(注意, 是按十六進制打印的) ffff8000

無符號右移 >>>: 最右側位不要了, 最左側補 0.

int a = 0xffffffff;
System.out.printf("%x\n", a >>> 1);
// 運行結果(注意, 是按十六進制打印的) 7fffffff

**注意:

  1. 左移 1 位, 相當於原數字 * 2. 左移 N 位, 相當於原數字 * 2 的N次方.
  2. 右移 1 位, 相當於原數字 / 2. 右移 N 位, 相當於原數字 / 2 的N次方.
  3. 由於計算機計算移位效率高於計算乘除, 當某個代碼正好乘除 2 的N次方的時候可以用移位運算代替. 4. 移動負數位或者移位位數過大都沒有意義.**

條件運算符

條件運算符只有一個:表達式1 ? 表達式2 : 表達式3
當 表達式1 的值爲 true 時, 整個表達式的值爲 表達式2 的值; 當 表達式1 的值爲 false 時, 整個表達式的值爲 表達式 3 的值.
也是 Java 中唯一的一個 三目運算符, 是條件判斷語句的簡化寫法.

// 求兩個整數的最大值
int a = 10;
int b = 20;
int max = a > b ? a : b;

運算符的優先級

//先看一段代碼
System.out.println(1 + 2 * 3);
//結果爲 7, 說明先計算了 2*3 , 再計算 1+ 另外一個例子
 System.out.println(10 < 20 && 20 < 30);
//此時明顯是先計算的 10 < 20 和 20 < 30, 再計算 &&. 否則 20 && 20 這樣的操作是語法上有誤的(&& 的操作數只能是 boolean).

運算符之間是有優先級的. 具體的規則我們不必記憶. 在可能存在歧義的代碼中加上括號即可.

小結

  1. % 操作在 Java 中也能針對 double 來計算.
  2. 需要區分清楚 前置自增 和 後置自增之間的區別.
  3. 由於 Java 是強類型語言, 因此對於類型檢查較嚴格, 因此像 && 之類的運算操作數必須是 boolean.
  4. 要區分清楚 & 和 | 什麼時候是表示按位運算, 什麼時候表示邏輯運算.

註釋

註釋是爲了讓代碼更容易被讀懂而附加的描述信息. 不參與編譯運行, 但是卻非常重要.
基本規則 Java中的註釋主要分爲以下三種

  • 單行註釋:// 註釋內容(用的最多)
  • 多行註釋:/* 註釋內容*/(不推薦)
  • 文檔註釋: /** 文檔註釋*/(常見於方法和類之上描述方法和類的作用),可用來自動生成文檔

註釋規範

  1. 內容準確: 註釋內容要和代碼一致, 匹配, 並在代碼修改時及時更新.
  2. 篇幅合理: 註釋既不應該太精簡, 也不應該長篇大論.
  3. 使用中文: 一般中國公司都要求使用中文寫註釋, 外企另當別論.
  4. 積極向上: 註釋中不要包含負能量
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章