JAVA開發過程當中寫函數都是不可避免的因而乎參數傳遞常常會困擾咱們,特別是有C/C++功底的童鞋總會糾結於「java究竟是值傳遞仍是引用傳遞?」java
先來一段代碼(和程序員交流最好的果真仍是代碼)程序員
public class TestMain { public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); for (int i = 0; i < 10; i++) { list.add(i); } add(list); for (Integer j : list) { System.err.print(j+",");; } System.err.println(""); System.err.println("*********************"); String a="A"; append(a); System.err.println(a); int num = 5; addNum(num); System.err.println(num); } static void add(List<Integer> list){ list.add(100); } static void append(String str){ str+="is a"; } static void addNum(int a){ a=a+10; } }
打印出來的結果是:
0,1,2,3,4,5,6,7,8,9,100,
*********************
A5
根據Horstmann的《java核心技術》(中文第8版P115-P117)的描述,java中是沒有引用傳遞的,原文摘錄以下:app
「java程序設計語言老是採用值調用。也就是說,方法獲得的是全部參數值的一個拷貝,特別是,方法不能修改傳遞給它的任何參數變量的內容。」函數
「有些程序員(甚至是本書的做者),認爲java程序設計語言對對象採用的是引用調用,實際上這種理解是不對的。」spa
public class TestMain { public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); for (int i = 0; i < 10; i++) { list.add(i); } { List<Integer> list1 = lsit; list1.add(100); } for (Integer j : list) { System.err.print(j+",");; } System.err.println(""); System.err.println("*********************"); String a="A"; { String a1 = a; a1 += "is a"; } System.err.println(a); int num = 5; { int a1 = num; a1 = a1 + 10; } System.err.println(num); } }
紅色部分就是被展開的函數,參數中的變量的值是外部傳入的值,函數內修改的都只是函數內部變量的值,這樣能理解函數的參數到底傳遞的是什麼了麼?設計
在有人和你說值傳遞和引用傳遞,直接糊他一臉吧~~~指針