1. 程式人生 > 實用技巧 >Java中的傳值與傳引用實現過程解析

Java中的傳值與傳引用實現過程解析

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中的形參是複製實參的一份拷貝(對於引用型則是複製引用的拷貝)(在棧中的拷貝),所以在函式中改變形參是無法改變實參的值的,改變引用只是將形參所代表的引用指向另外的新的物件,而實參的引用還指向原來的物件,改變形參引用的成員當然會影響實參引用成員的值,因為他們的引用都指向同一個物件。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援碼農教程。