2017-01-27 32 views
1

これについてのドキュメントを見つけるのにかなり時間が掛かり、失敗しました。問題は、コードスニペットの説明ではなく、「どのように動作するか」の詳細です。Java:元のオブジェクト参照を含むオブジェクト内のオブジェクト参照

トラブル:

xObject x = new xObject(); 
yObject y = new yObject(x); 

x.add(y); 

xObjectがあります。今すぐ

private xObject x; 

public yObject(xObject _x) { 
    this.x = _x; 
} 

をそれはArrayListのからy秒で遊ぶことは可能です:

private ArrayList<yObject> yObjects;  

public void add(yObject _y) { 
    this.yObjects.add(_y); 
} 

そしてyObjectがあり内部x?

私が試してみると、私は必要な脳の力が混乱しないように思われないので、テストで物事を理解しようとするのは不可能です。なぜ私よりも知的な人たちが手伝う)。

答えて

3

ArrayList<yObject>にはyObjectsが含まれていません。の参照とyObjectsが含まれています。実際ににはが含まれているのはヒープだけです。

あなたの電話の「連絡先」リストにあなたの友人の名前を入れる方法と変わらず、あなたの電話の連絡先リストにあなたの名前を入れることができます。あなたの連絡先リストのどちらにも実際の人が含まれていないため、パラドックスはありません。リストには人を抱く方法に関する情報しか入っていません。同様に、Java変数とJavaコンテナには実際にオブジェクトが含まれていません。これらのオブジェクトはに必要な情報だけを含んでおり、というオブジェクトを見つけて対話します。

1

はい、オブジェクトを参照しているので、xの中のyで再生できます。したがって、x内のyを更新すると、x外のyも更新されます。

+0

しかし、 'x'に' y'のリストが含まれていて、 'y'の1つにリストを含む' x'が含まれているということではありませんか? –

+0

はい、そうです。 「_しかし、その意味はありません」とは、あなたが何かに懐疑的であることを示すようです。 –

+0

あなたは無限の参照を持っています;) Javaはそれを処理します;) – hya

関連する問題