java函式傳參問題解析

2021-09-03 05:52:38 字數 1224 閱讀 5491

廢話不多說直接上**:

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多引數的傳值問題解析

有時候,我們傳入到方法的引數的個數是不固定的,為了解決這個問題,我們一般採用下面的方法 過載,多過載幾個方法,盡可能的滿足引數的個數。顯然這不是什麼好辦法。將引數作為乙個陣列傳入。雖然這樣我們只需乙個方法即可,但是,為了傳遞這個陣列,我們需要先宣告乙個陣列,然後將引數乙個乙個加到陣列中。現在,我們可...