C 語言中有一種數據類型叫做指針,于是將一個數據作為參數傳遞給某個函數的時候,就有 兩種方式:傳值,或是傳指針,它們的區別,可以用一個簡單的例子說明:
/* 例 5 */ /** * @(#) test.c * @author fancy */ void SwapValue(int a, int b) { int t = a; a = b; b = t; } void SwapPointer(int * a, int * b) { int t = * a; * a = * b; * b = t; } void main() { int a = 0, b = 1; printf("1 : a = %d, b = %d/n", a, b); SwapValue(a, b); printf("2 : a = %d, b = %d/n", a, b); SwapPointer(&a, &b); printf("3 : a = %d, b = %d/n", a, b); } 運行結果:
1 : a = 0, b = 1 2 : a = 0, b = 1 3 : a = 1, b = 0 大家可以明顯的看到,按指針傳遞參數可以方便的修改通過參數傳遞進來的值,而按值傳遞 就不行。
當 Java 成長起來的時候,許多的 C 程序員開始轉向學習 Java,他們發現,使用類似 SwapValue 的方法仍然不能改變通過參數傳遞進來的簡單數據類型的值,但是假如是一個對象, 則可能將其成員隨意更改。于是他們覺得這很像是 C 語言中傳值/傳指針的問題。但是 Java 中 沒有指針,那么這個問題就演變成了傳值/傳引用的問題??上⑦@個問題放在 Java 中進行討論 并不恰當。