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

Java 運算子完整指南:優先序、整數/布林/浮點/字串運算與型別轉換陷阱

     編輯:Java 相關知識

Java 運算子體系全景

運算子是構建表達式的基礎元素。掌握優先序、結合性、各類型運算特性與型別提升規則,能寫出正確且高效的表達式。

1. 運算子優先序與結合性(由高到低)

優先序運算子結合性說明
1[] . ()左→右陣列存取、成員存取、方法呼叫
2++ -- + - ~ !右→左一元運算子(後置 ++/-- 例外)
3* / %左→右乘法、除法、取餘
4+ -左→右加法、減法、字串串接
5<< >> >>>左→右位移運算
6< > <= >= instanceof左→右關係比較
7== !=左→右相等比較
8&左→右位元 AND / 布林 AND(不短路)
9^左→右位元 XOR / 布林 XOR
10|左→右位元 OR / 布林 OR(不短路)
11&&左→右條件 AND(短路)
12||左→右條件 OR(短路)
13?:右→左三元條件運算子
14= += -= *= /= %= &= ^= |= <<= >>= >>>=右→左指派與複合指派

範例:a = b + c * d / (c ^ d) → 先算括號 c^d,再 c*d,再除,最後加 b 指派給 a。

2. 整數運算子

一元運算子

運算子操作範例副作用
+正號(無實際作用)+5無
-負號(取反)-i無
~位元補數(逐位取反)~0 = -1無
++遞增 1++i / i++改變變數值
--遞減 1--i / i--改變變數值

前置 vs 後置:++i 先增後用;i++ 先用後增。複合表達式中差異顯著:int x = i++ vs int x = ++i。

二元算術運算子

  • + - * / %:標準四則運算與取餘。
  • 整數除法:向零截斷(5/2=2, -5/2=-2)。
  • 除零:拋 ArithmeticException。
  • 溢位:無例外,環繞(Integer.MAX_VALUE + 1 = Integer.MIN_VALUE)。

位元運算子

  • & | ^ ~ << >> >>>:操作二進位表示。
  • >> 算術右移(保留符號位),>>> 邏輯右移(補 0)。
  • 常用技巧:x & 1 判斷奇偶、x << n 等價 x * 2^n。

複合指派

x += 5;  // 等價 x = x + 5
x <<= 2; // 等價 x = x << 2

3. 布林運算子

  • 關係運算:< > <= >= == != → 產生 boolean。
  • 邏輯運算:! && ||。
  • 短路特性:&& 左側 false 不評估右側;|| 左側 true 不評估右側。
  • 非短路版:& | ^ 用於布林時不短路(罕用)。

三元條件運算子

結果 = 條件 ? 真值 : 假值;
// 範例:取較大值
int max = (a > b) ? a : b;

4. 浮點數運算特性

  • 遵循 IEEE 754 標準。
  • 精度問題:0.1 + 0.2 != 0.3,貨幣計算用 BigDecimal。
  • 特殊值:NaN、Infinity、-Infinity、-0.0。
  • 比較陷阱:NaN != NaN 為 true,用 Double.isNaN() 檢查。
  • 型別提升:運算中有 double → 結果為 double;否則 float。

5. 字串運算子

  • +:串接,非字串運算元自動 toString()。
  • +=:串接指派。
  • 效能陷阱:迴圈中 s += x 產生大量中間物件,用 StringBuilder。

6. 型別轉換與提升規則

轉換類型範例風險
自動擴展(安全)byte→short→int→long→float→double無資料遺失
窄化轉換(需強制)(int) d, (byte) i截斷/精度遺失
基本型別↔包裝類別自動裝箱/拆箱NullPointerException 風險

安全轉換鏈:byte→short/char→int→long→float→double(單向)。

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