このGIFは、たぶん私はひどくこれを誤解しますが、私と一緒に負担してくださいよhttps://blog.penjee.com/passing-by-value-vs-by-reference-java-graphical/Javaが値渡しの場合、なぜメソッド内のオブジェクトのプロパティを変更できますか?
から取得されました。
私の理解によると、私たちがjavaで変数を定義するとき、私たちは基本的に、作成されたそのオブジェクトへのポインタを作成しています。すなわち
Object objPointer = new Object();
ここで、objPointerはオブジェクト自体ではなく、作成されたオブジェクトへの参照です。我々はこの方法では、引数としてこのオブジェクトを使用する場合と:
void foo(Object newPointer){
//newPointer points to a copy of the Object objPointer pointed to.
}
foo(objPointer);
仮引数newPointerは、引数として渡されたオブジェクトの値のコピーへのポインタです。このため、Javaではスワップメソッドが機能しません。
私の質問は次のとおりです。 仮引数が元のオブジェクトのコピーのみを指している場合、そのオブジェクトのプロパティの値を変更できるのはなぜですか?変更fillCupはコピーのみのプロパティを変更した場合どのようにカップオブジェクトのプロパティは、以下のとおりです。すなわち
class Object{
int var = 0; //default value of 0
void setVar(int newValue){
this.var = newValue;
}
}
void foo(Object newPointer){
newPointer.setVar(1);
}
Object objPointer = new Object();
//The Object objPointer points to has a var value of 0 as default.
foo(objPointer);
/*
After foo is called, the var value of objPointer has changed to 1
although the setVar method should only change the value of var for the copy
of that object that newPointer points to.
*/
私は一種の見つけGIFは、私が言っているものを示して、私が求めている何が理にかなって願っています?あなたはfoo
方法をobjPointer
の参照を渡すと
コピーは、同一の参照(すなわち、2つのインスタンスが存在しない)へのポインタである値です。 –
"ポインタ"は渡される値です。ヒープには 'Object'のインスタンスがまだ1つしかありませんが、スタックに"ポインタ "のコピーがあります。 – David
ポインタはコピーされますが、両方のポインタが同じオブジェクトを指しています。 –