次のような関数に渡される参照を変更できないことはわかっています
void fun(dog a){
a=null;
}
機能実行後
main(String[] args){
dog a=new dog();
fun(a);
}
犬 a は変更されません。だから、関数内で参照 a を null に変更するにはどうすればよいのだろうと思っていました
次のような関数に渡される参照を変更できないことはわかっています
void fun(dog a){
a=null;
}
機能実行後
main(String[] args){
dog a=new dog();
fun(a);
}
犬 a は変更されません。だから、関数内で参照 a を null に変更するにはどうすればよいのだろうと思っていました
できません。あなたができる最も近いことは
Dog fun(Dog a) {
return null;
}
public static void main(String[] args){
Dog a = new Dog();
a = fun(a);
}
(特に、この制限により、「遠く離れた不気味なアクション」が少なくなる可能性があります。たとえば、ローカル変数の参照は、明示的な代入の結果としてのみ変更できます。)
Javaは参照の値が渡される値渡しなので、新しい参照値がパラメータとして渡されます。この参照がメソッド内の新しいオブジェクトを指している場合、参照の変更はメソッド外のオブジェクトには反映されません。
への外部参照を作成するには、以下のような操作が必要になる場合がありますnull
。
Object fun(){
return null;
}
main(String[] args){
dog a=new dog();
a=fun();
}
Java は厳密には値渡し言語です (すばらしい情報については、これを参照してください)。つまり、オブジェクト参照をメソッドに渡すと、メソッドの参照のコピーが作成されるということです。したがって、関数内の参照を無効にするために行うことは、参照変数の LOCAL コピーを無効にするだけであり、参照変数が指していたオブジェクトは安全で健全なメモリ内に残ります。
簡単な例えは、同じ建物に通じる 2 つの平行した通りがあるようなものだと思います。道路の 1 つを破壊することはできますが、建物や他の道路には影響しません。