Java中的傳值與傳引用實現過程解析
阿新 • • 發佈:2020-11-19
java函式中的傳值和傳引用問題一直是個比較“邪門”的問題,其實java函式中的引數都是傳遞值的,所不同的是對於基本資料型別傳遞的是引數的一份拷貝,對於類型別傳遞的是該類引數的引用的拷貝,當在函式體中修改引數值時,無論是基本型別的引數還是引用型別的引數,修改的只是該引數的拷貝,不影響函式實參的值,如果修改的是引用型別的成員值,則該實參引用的成員值是可以改變的,例子如下。
首先是定義改變引數的
public static void changeInt(int i) {// 改變int型變數的函式 i = 100; } public static void changeString(String s) {// 改變String型變數的函式 s = "changeString"; } public static void changeModel(Model model) {// 改變Model型變數的函式 model = new Model(); model.i = 1; model.s = "changeModel"; } public static void changeModel2(Model model) {// 改變Model型變數的成員的函式 model.i = 1; model.s = "changeModel"; } // 類Model class Model { public int i = 0; public String s = "no value"; } // 測試程式 public static void main(String[] args) { int i = 0; String s = "hello"; Model model = new Model(); Model model2 = new Model(); changeInt(i); System.out.println("i=" + i); changeString(s); System.out.println("s=" + s); changeModel(model); System.out.println("model:" + model.s); changeModel2(model2); System.out.println("model2:" + model2.s); }
測試結果:
i=0 s=hello model:no value model2:changeModel
可以看出i沒有改變,s也沒有改變,mode也沒有改變,model2的s改變了。
總結:
java中的形參是複製實參的一份拷貝(對於引用型則是複製引用的拷貝)(在棧中的拷貝),所以在函式中改變形參是無法改變實參的值的,改變引用只是將形參所代表的引用指向另外的新的物件,而實參的引用還指向原來的物件,改變形參引用的成員當然會影響實參引用成員的值,因為他們的引用都指向同一個物件。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援碼農教程。