1

Nodeクラスがあるとしましょう。単一Node parentNode.のフィールドがあり、セッターとゲッターもあります。

私は2つのノードを持っています:Node nodeANode nodeB

これが私がやりたいことです:nodeB'sの親をnodeA'sの親に設定し、次にnodeA'sの親をnullに設定します。

  1. nodeB.setParent(nodeA.getParent());
  2. nodeA.setParent(null); // bad since nodeB.getParent() will = null

上記を実現するには、クローンを作成してから実行する必要がありnodeA,ますnodeB.setParent(nodeAClone.getParent())か?

4

2 に答える 2

3

nodeX.parentはオブジェクトへの参照であるため、次のようになります。

  • 電話をかけるnodeB.setParent(nodeA.getParent())と、nodeBに「ここにnodeAの親のアドレスがあります」と言っています。
  • 次にnodeA.setParent(null);、nodeAに「あなたの親が住んでいる場所を忘れてください。あなたの親は今は何もありません」と言っていると言うとき。
  • 2番目のステートメントでnodeBに何も言わなかったが、nodeBには、現在その親であるアドレスがまだ残っている。
于 2013-02-11T23:18:17.307 に答える
2

nodeA.setParent(null); // nodeB.getParent()はnullになるため、不良

いいえ、nodeB.parentに設定されませんnull。Javaは常にを使用し、ではPass by Valueありませんpass by reference。それを10回繰り返します。

また、参照を渡す場合は、参照の値で渡します。


もっと詳しく理解しましょう。

あなたがするとき:-

nodeB.setParent(nodeA.getParent());

への参照のコピーを作成しnodeA parent、それをに保存するだけですnodeB parent。これで、オブジェクトを参照する2つの参照ができました。これnodeA parentで、に設定nodeA parentするとnull、オブジェクトはそのオブジェクトから切り離されますparentが、nodeB parent参照はまだ存在します。

于 2013-02-11T23:16:13.013 に答える