public static void Swap(int c, int d) {
int temp = c; c = d; d = temp; // 僅交換局部副本
}
Swap(c, d); // 實參 c,d 不變
int 等)傳遞的是**值的副本**;方法內修改副本,不影響原變量。static 只決定變量屬於類而非實例,**不改變參數傳遞語義**。方法參數仍是局部變量槽,接收副本值。
| 方案 | 代碼示例 | 適用場景 |
|---|---|---|
| 1. 返回新值(函數式) | int[] swap(int a, int b) { return new int[]{b, a}; }int[] r = swap(c, d); c=r[0]; d=r[1]; | 簡單交換、無副作用 |
| 2. 包裝類/數組持有引用 | void swap(Integer[] arr) { int t=arr[0]; arr[0]=arr[1]; arr[1]=t; }Integer[] w = {c, d}; swap(w); c=w[0]; d=w[1]; | 需原地修改、兼容舊 API |
| 3. 封裝為對象(推薦) | class Pair { int a, b; }void swap(Pair p) { int t=p.a; p.a=p.b; p.b=t; } | 語義清晰、面向對象、可擴展 |
// C++ 真正引用傳遞
void swap(int &a, int &b) { int t=a; a=b; b=t; }
swap(c, d); // 真正交換
// Java 無此機制,必須用上述變通
Java 基本類型參數**無法在方法內修改原變量**,因為是值傳遞副本。解決路徑:**返回新值、用可變容器(數組/包裝類)、封裝對象**。理解「引用傳遞的是引用的值」是 Java 參數傳遞的核心鑰匙。