在Java 中,參數傳遞機制有兩種:傳值、傳址。
基本型別作為參數傳遞時,是傳遞值的拷貝,無論你怎麼改變這個拷貝,原值是不會改變的;屬於傳值。
物件作為參數傳遞,是把物件在記憶體中的位址拷貝了一份傳給了參數;屬於傳址。
public static void main(String[] args) { int n =3; // ① System.out.println(n); // 3 chageData(n); // ② System.out.println(n); // 3}public static void chageData(int num){ num = 10; // ③}
觀察輸出結果,發現n 的值並沒有改變。
因為 n,num 都是基本型,所以值就直接保存在變數中。
流程圖如下(對應程式碼中的①②③):
public static void main(String[] args) { String str = "hello"; // ① System.out.println(str); // hello chageData(str); //② System.out.println(str); // hello}public static void chageData(String s){ s ="world"; // ③}
public static void main(String[] args) { StringBuffer stb = new StringBuffer("hello"); // ① System.out.println(stb); // hello chageData(stb); // ② System.out.println(stb); // hello world}public static void chageData(StringBuffer s){ s.append("world"); // ③} }