2016-11-05 6 views
0

私の質問は、Javaを使用すると、ツリーなどのコレクションを持つことが可能です。ツリー内のノードを変数に保存します。私の理解では同じオブジェクトアドレスであるので、ローカル変数を使ってノード内のデータを変更すると、コレクション内のデータも変更されますか?ローカル変数を使用してコレクション内の値を変更する

+1

なぜあなたはそれをテストしないのですか?しかし、同じオブジェクトに対する2つの参照がある場合、1つの参照を使用して一意のオブジェクトの状態を変更するとそのオブジェクトが変更され、他の参照は同じ変更オブジェクトを指しています。 –

答えて

0

ローカル変数はノードへの参照を保持するため、ローカル変数のデータを変更すると、参照するオブジェクトのデータが実際に変更されます。この場合、ツリー内のノードも同じオブジェクトであるため変更されます。

敬具

アレックス

0

答えはちょっとです。変数varがあり、アドレスがコレクションthingsに格納されているとします。次に、var = some_varのような操作を行うと、コレクション内のデータは変更されません。これは、割り当て内のvarのアドレスを上書きしているためです。しかし、何らかの形でvarを変更すると、両方が変更されます。これは、アドレスが同じままであるために発生し、正しいメモリに書き込んでいます。例えばvar.field = some_datathings[var].fieldを変更します。

このため、varのコピーをthingsにロードすることをお勧めします。これを誤って接続しないでください。人々はしばしば、このようなものを実現させずにつなぎ、変数が変更されたことを認識せずに変数を変更します。

関連する問題