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