Java中的方法參數傳遞方式分為值傳遞和引用傳遞兩種。
值傳遞:簡單來說就是將變量的值傳遞給方法的參數,方法得到的是變量值的拷貝,原變量的值不會改變。
// 值傳遞示例 public class Test{ public static void main(String args[]){ int num = 10; System.out.println("調用change方法前:" + num); change(num); System.out.println("調用change方法后:" + num); } public static void change(int num){ num++; System.out.println("change方法中:" + num); } } // 輸出結果: // 調用change方法前:10 // change方法中:11 // 調用change方法后:10
引用傳遞:將對象的地址傳遞給方法的參數,方法得到的是對象的地址,可以修改對象屬性,從而改變原對象的值。
// 引用傳遞示例 import java.util.ArrayList; public class Test{ public static void main(String args[]){ ArrayListlist = new ArrayList (); list.add("apple"); list.add("banana"); list.add("orange"); System.out.println("調用change方法前:" + list); change(list); System.out.println("調用change方法后:" + list); } public static void change(ArrayList list){ list.add("pear"); System.out.println("change方法中:" + list); } } // 輸出結果: // 調用change方法前:[apple, banana, orange] // change方法中:[apple, banana, orange, pear] // 調用change方法后:[apple, banana, orange, pear]
需要注意的是,原本的傳遞方式不會受到賦值操作的影響。即使將一個引用類型的變量賦值給另一個變量,賦值后的變量與原本的變量雖然指向同一對象,但是它們并不是同一個變量。
// 引用傳遞賦值示例 import java.util.ArrayList; public class Test{ public static void main(String args[]){ ArrayListlist1 = new ArrayList (); list1.add("apple"); ArrayList list2 = list1; System.out.println(list1 == list2); list2.add("banana"); System.out.println("list1:" + list1); System.out.println("list2:" + list2); } } // 輸出結果: // true // list1:[apple, banana] // list2:[apple, banana]