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も変わらず、model 2のsが変わったと見られます。
まとめ:
javaの中のモザイクは、モザイクのコピー(参照型については、参照のコピー)であるので、関数の中でモザイクを変更することは、実参照の値を変更することはできません。変更参照は、モザイクの代表的な参照を別の新しいペアに向けるだけです。また、実際の参照は元のオブジェクトを指します。参照を変更するメンバーはもちろん、参照が同じオブジェクトを指しているので、参照メンバーの値に影響します。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。