廢話不多說直接上**:
public class test ;
system.out.println("before change: "+"a="+a+" "+"b[0]="+b[0]);
change(a);
change(b);
system.out.println("after change: "+"a="+a+" "+"b[0]="+b[0]);
} public static void change(int a)
public static void change(int b)
}
輸出結果是:
(1)當我們把函式外的變數a傳遞給函式引數a,實際上是把10賦值給函式引數a。此時函式外的a與函式內的a值是
一樣的,但是他們在棧中的位置不一樣,所以不管函式內的a值如何變化都不會影響到函式外的a值。
(2)當我們把函式外的b傳遞給函式引數b,實際上是把函式外b儲存的位址賦值給函式引數b,此時函式外的b與函
數內的b的值相同,指向同乙個陣列物件。當我們在函式內部修改陣列的值時,函式內的b的值沒有變化,只是函式
內的b改變了他指向的陣列物件內的值。因為函式外的b與函式內的b指向同乙個物件,所以函式內的b修改了陣列的
值也會影響函式外b的陣列的值。
(1).基本資料型別的變數在棧中儲存的是實際值,而物件的引用儲存的是物件的位址值。
(2).string物件標記著final,所以不能改變string物件的值,只能建立新string物件,然後把新
string物件的位址賦值給string型別的引用。
(3).陣列是物件。
關於函式傳參問題
swap的功能就是個簡單交換兩個數的值 在主函式中呼叫 swap array j 1 array j 那真正傳遞的什麼引數呢?關於這個問題和acm群裡的大牛們討論完並真正測試後,得到爭取結論 函式傳遞都是從後往前傳的,就是第乙個引數最後傳,最後乙個第乙個傳,所以是先傳array j 然後j j 1,...
函式傳參問題(C C )
這兩天做日曆系統小專案,發現了乙個很關鍵的問題 函式傳參問題。1 傳值呼叫和傳址呼叫 swap函式為例 傳值呼叫現象 x和y作為實參,在進入函式的時候是只拷貝了乙份自己的副本 副本具有和自己一樣的值,但是變數 不同。所以我們在子函式swap中交換的實際是副本而不是x,y的真身。所以在swap內部確實...
關於java多引數的傳值問題解析
有時候,我們傳入到方法的引數的個數是不固定的,為了解決這個問題,我們一般採用下面的方法 過載,多過載幾個方法,盡可能的滿足引數的個數。顯然這不是什麼好辦法。將引數作為乙個陣列傳入。雖然這樣我們只需乙個方法即可,但是,為了傳遞這個陣列,我們需要先宣告乙個陣列,然後將引數乙個乙個加到陣列中。現在,我們可...