| 類別 | 運算符 | 關鍵點 |
|---|---|---|
| 算術 | + - * / % ++ -- | 整數相除得整數,*1.0 轉浮點;++/-- 前後綴區別 |
| 賦值 | = += -= *= /= %= | 擴展賦值隱含強轉:short s=1; s+=1 OK; s=s+1 編譯錯 |
| 關系 | == != > < >= <= | 結果均為 boolean;instanceof 也屬此類 |
| 邏輯 | & | ^ ! && || | &&/|| 短路;^ 異或:true^true=false |
| 位運算 | & | ^ ~ << >> >>> | 直接操作二進制位;>>> 無符號右移補 0 |
| 三目 | ? : | 條件?結果1:結果2;嵌套可實現多條件判斷 |
// 1. 加法: 數值運算
// 2. 正號: +5 (無實際作用)
// 3. 字符串連接: 任意類型 + String → String
System.out.println('a' + 1); // 98 (char 'a'=97 提升為 int 相加)
System.out.println("hello" + 'a' + 1); // helloa1 (左到右連接)
System.out.println('a' + 1 + "hello"); // 98hello (先算 'a'+1=98 再連接)
int x = 4;
int y = (++x) + (++x) + (x * 10);
// 步驟: x=5 → x=6 → 6 + 6 + 60 = 72
// &&: 左 false 右不執行 | &: 雙邊必執行
if (x > 0 && (++y > 0)) { ... } // x<=0 時 y 不增
if (x > 0 & (++y > 0)) { ... } // 無論 x, y 必增
a ^= b; b ^= a; a ^= b;(n & 1) == 1n << 1 (×2), n >> 1 (÷2)n & (m-1) 等價 n % m// 面試題:不借第三變量交換 a=10, b=20
a = a ^ b; b = a ^ b; a = a ^ b; // 利用 x^x=0, x^0=x
// 或算術法: a=a+b; b=a-b; a=a-b;
// 或一行: b = (a+b) - (a=b);
// 獲取三數最大值
int max = (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);
// 等價 if-else 但三目有返回值,可直接賦值
import java.util.Scanner;
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
double d = sc.nextDouble();
String s = sc.next(); // 讀單詞 (空格分隔)
String line = sc.nextLine(); // 讀整行
// if 單分支
if (score >= 60) System.out.println("及格");
// if-else 雙分支
if (score >= 60) System.out.println("及格"); else System.out.println("不及格");
// if-else if-else 多分支
if (score >= 90) grade = 'A';
else if (score >= 80) grade = 'B';
else if (score >= 70) grade = 'C';
else if (score >= 60) grade = 'D';
else grade = 'E';
// switch-case (JDK12+ 支持箭頭語法)
switch (day) {
case 1,2,3,4,5 -> System.out.println("工作日");
case 6,7 -> System.out.println("週末");
default -> System.out.println("非法輸入");
}
注意:if 條件必須 boolean;大括號建議不省略;switch 穿透特性 (無 break 繼續執行下一 case)
// for 循環
for (int i = 0; i < 10; i++) { ... }
// while 循環
while (condition) { ... }
// do-while 至少執行一次
do { ... } while (condition);
// 增強 for (遍歷數組/集合)
for (int x : arr) { ... }
// 跳轉控制
break; // 跳出最近循環
continue; // 跳過本次迭代
return; // 結束方法
// 標籤跳轉 (慎用)
outer: for (int i=0; i<3; i++)
for (int j=0; j<3; j++)
if (i==1 && j==1) break outer;
for(int i=3,sum=0;i<=100;i+=3)sum+=i;for(int i=100;i<1000;i++)if(i==cubeSum(i))print(i);

運算符與流程控制是程序邏輯的骨架。精通優先級、短路、位運算技巧,靈活運用 if/switch/循環/跳轉,能寫出既高效又易讀的業務邏輯代碼。