4

If I instantiate an object and pass it to an function, in this function I assign this object to null. It seems when return from the function, the object still there.

I just want to know when I assign null, what happens.

4

4 に答える 4

9

オブジェクトに割り当てることはできません。あなたが今まで持っているのはプリミティブと参照だけです。参照は、nullまたは適切なクラスのオブジェクトへのポインタのいずれかです。

Java引数は値で渡されます。呼び出されたメソッドは、参照のコピーを取得しました。その参照をnullにしました。呼び出し元のメソッドには、渡されたコピーへの割り当ての影響を受けない独自の参照があります。その参照はまだオブジェクトを指しています。

于 2012-12-18T05:55:56.497 に答える
1

Javaのメソッドへの引数は「値渡し」です。これは、オブジェクト参照のコピーをメソッドに渡すことを意味します。この参照にnullの値を割り当てると、メソッド呼び出し内でその値が変更されますが、コピーであるため、メソッド外の参照には何も行われません。コードで示されています:

void doSomething(final String input) {
    input = null;
    System.out.println("Input is: " + input); // prints null
    return;
}

final String name = "Bob";
doSomething(name);
System.out.println("Name is: " + name); // prints 'Bob'
于 2012-12-18T05:55:48.947 に答える
1

オブジェクトをインスタンス化して関数に渡し、関数内でそれをnullなどに再割り当てすると、呼び出し側では、引数が値(オブジェクトの場合は参照のコピー)によって渡されるため、呼び出し時に反映されません。側はまだ古いオブジェクトを指します。メソッドでの再割り当てを制限する場合はfinal、メソッドパラメータでキーワードを使用できます

于 2012-12-18T05:57:04.890 に答える
0

オブジェクト参照を関数に渡すと(Javaでは常にメソッドと呼ばれます)、メソッドスコープで新しい参照がスタックメモリに作成されますが、それらはヒープメモリ内の同じオブジェクトを指します。したがって、新しいにnullを割り当てると参照、そのオブジェクトへのこの参照のリンクのみが壊れています。前の参照には影響しません。

于 2012-12-18T05:58:00.320 に答える