首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 基礎運算符完全指南:算術、位運算、邏輯、賦值與優先級陷阱

     編輯:Java 綜合教學

前言:運算符是代碼邏輯的積木,掌握細節少寫 Bug

Java 提供豐富的運算符,但細節決定成敗:整數除法截斷、位運算符號位處理、短路邏輯副作用、自增自減前後綴差異。本文系統整理六大類運算符,附帶真值表、代碼陷阱與最佳實踐。

一、 算術運算符

運算符 名稱 示例 (A=10, B=20) 結果 備註
+正號+A10無實際作用
-負號-B-20取反
+加法A + B30字符串連接時重載
-減法A - B-10
*乘法A * B200
/除法B / A2整數除法截斷小數位
%取模B % A0結果符號與被除數同號

陷阱:int c = 5 / 2; // c = 2, 非 2.5。需浮點數除法至少一操作數為浮點型:5 / 2.0。

二、 位運算符(針對 int/long 二進制位)

假設 A = 60 (0011 1100), B = 13 (0000 1101)

運算符 名稱 規則 示例 結果 (十進制)
~按位非0→1, 1→0~A195 (1100 0011)
&按位與同為 1 則 1A & B12 (0000 1100)
|按位或至少一 1 則 1A | B61 (0011 1101)
^按位異或不同則 1A ^ B49 (0011 0001)
<<左移低位補 0,高位丟棄A << 2240 (1111 0000) ≈ ×4
>>右移(算術)高位補符號位A >> 215 (0000 1111) ≈ ÷4
>>>無符號右移高位補 0A >>> 215 (正數同右移),負數變正

核心規律:
• 左移 n 位 ≈ 乘 2ⁿ (無溢出時)
• 算術右移 n 位 ≈ 除 2ⁿ (保留符號)
• 無符號右移將負數轉為大正數
• ^ 可用於不借助臨時變量交換兩數:a ^= b; b ^= a; a ^= b;

三、 字符串連接運算符 +

  • 任一操作數為 String,另一操作數自動轉字符串(調用 toString(),null 變 "null")。
  • "abc" + 123 → "abc123"
  • 編譯器優化:字面量常量折疊;變量拼接底層用 StringBuilder.append()。
  • 性能建議:循環大量拼接顯式用 StringBuilder,避免隱式創建大量中間對象。

四、 關系運算符(返回 boolean)

運算符 含義 示例 (A=10, B=20)
==等於false
!=不等於true
>大於false
>=大於等於false
<小於true
<=小於等於true

注意:對象比較 == 比較引用地址,內容比較必用 equals()。

五、 邏輯運算符(操作 boolean)

運算符 名稱 規則 示例 (A=true, B=false)
!邏輯非取反!B → true
&邏輯與全真才真A & B → false
|邏輯或全假才假A | B → true
^邏輯異或相同為假,不同為真A ^ B → true

短路運算符(實際開發 99% 使用)

運算符 名稱 短路規則 典型用途
&&短路與左邊 false → 右邊不執行obj != null && obj.method() 防空指針
||短路或左邊 true → 右邊不執行cacheHit || loadFromDB() 避免多餘查詢

區別:&/| 總計算兩邊;&&/|| 可能跳過右邊(副作用不執行)。

六、 賦值運算符

運算符 等價寫法 示例
=a = ba = 10
+=a = a + ba += 5 → 15
-=a = a - b
*=a = a * b
/=a = a / b
%=a = a % b
&=a = a & b
|=a = a | b
^=a = a ^ b
<<=a = a << b
>>=a = a >> b
>>>=a = a >>> b

自增自減陷阱


int i = 10;
int a = i++; // a=10, i=11 (後綴:先用後增)
int b = ++i; // b=12, i=12 (前綴:先增後用)
int c = i-- + ++i; // 經典面試題:i=12 → c=12+13=25, 最後 i=12

建議:避免在複雜表達式中混用前後綴,拆分為多行可讀性更高。

七、 運算符優先級速查(高→低)

1. 後綴: expr++, expr--
2. 一元: ++expr, --expr, +expr, -expr, ~, !
3. 乘除模: *, /, %
4. 加減: +, -
5. 移位: <<, >>, >>>
6. 關系: <, >, <=, >=, instanceof
7. 相等: ==, !=
8. 位與: &
9. 位異或: ^
10. 位或: |
11. 邏輯與: &&
12. 邏輯或: ||
13. 三元: ? :
14. 賦值: =, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>=

金律:不確定優先級時,加括號。代碼寫給人看,順便給編譯器跑。

結語

運算符看似基礎,實則暗藏玄機。熟練掌握整數除法截斷、位移符號位、短路副作用、自增自減順序等細節,能讓你少踩無數坑,寫出更健壯、可讀、高效的 Java 代碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved