vb6またはjavaのオブジェクト複製とは何ですか?どのような状況で私たちはクローンを使用しますか?クローンオブジェクトは何を意味しますか?誰でも私に教えてください。オブジェクトを複製することは何を意味しますか?
答えて
クローニングは、実際にオブジェクトデータを新しいオブジェクトにコピーしています。
この例では、データのクローンを作成しません:Foo
がメンバーa
があり、o.a
その後、p.a
を変更した場合
Foo p = new Foo();
Foo o = p;
も同じオブジェクトを理由p
とo
ポイントの両方を変更します。この場合
しかし、
Foo p = new Foo();
Foo o = p.Clone();
あなたがp.a
を変更した場合、彼らは実際にオブジェクトを分離するためにポイントしているため、その後o.a
は同じまま。
実際にクローンを作成するには、浅いクローンと深いクローンの2つの方法があります。
シャロークローンは新しいオブジェクトを作成し、メンバーを新しいオブジェクトにコピーします。つまり、メンバーの1つが実際に別のオブジェクトへのポインタである場合、そのオブジェクトは古いオブジェクトと新しいオブジェクトの間で共有されます。
深いクローンが実際に通過し、すべてのメンバーを新しいオブジェクトにクローンします。そうすれば、オブジェクトはすべてのデータの完全なコピーになります。
ところで、セマンティックレベルのクローンである第3のクローニング方法があります。セマンティックレベルのクローン、例えば、リスト
@supercat - それはリストの浅いクローンとどう違うのですか? – Aaron
@Aaron:コレクションが配列への参照として実装され、有効なアイテムの数がカウントされているとします。このようなコレクションを保持するオブジェクトのシャロークローンは、コピーされた有効なアイテム数を持つ新しいオブジェクトですが、元のアイテムと同じアイテムの配列への参照です。準レベルのクローンは、コピーされたカウントと、配列のシャロークローンへの参照を持ちます。 – supercat
一般的に話すオブジェクトは参照渡しです。したがって、$objB=$objA
と言うと、新しいオブジェクトを取得できません。あなたは同じオブジェクトの新しい名前を取得しています。しかし、$objB= clone $objA
と言うと、$objA
のコピーが得られます。最初のケースでは、$objB
に何をしても、$objA
が発生します。 2番目のケースでは、$objB
は独立しています。
- 1. プログラムを「ビルド」することは何を意味しますか
- 2. 複数のソートキー列を持つことは何を意味しますか?
- 3. ネットワークインターフェイスドライバを開くことは何を意味しますか?
- 4. "最も派生したオブジェクト"は何を意味しますか?
- 5. オブジェクト変数の種類は何を意味しますか?
- 6. オブジェクト<String>はJavaで何を意味しますか?
- 7. ここでコロンは何を意味していますか?
- 8. getActivity()は何を意味しますか?
- 9. (+ var)は何を意味しますか
- 10. IndexOutofRangeExceptionは何を意味しますか?
- 11. UnmappableCharacterExceptionは何を意味しますか?
- 12. バックスラッシュは何を意味しますか?
- 13. {}は何を意味しますか?
- 14. new()は何を意味しますか?
- 15. 「ネットワークパフォーマンス」は何を意味しますか?
- 16. javascript:voidは何を意味しますか?
- 17. 複合let/const代入は何を意味しますか?
- 18. 「ODRを使用する」とは何を意味しますか?
- 19. ノードを拡張することは何を意味しますか?
- 20. 2つのFunctorを構成することは何を意味しますか?
- 21. DataMemberAttributeをインターフェイスメンバーに配置することは何を意味しますか?
- 22. gitkで「このコミットをマークする」とは何を意味しますか?
- 23. 値を正規化することは何を意味しますか?
- 24. CoreDataはオブジェクトを複製しますか?
- 25. このsocket.gaierrorは何を意味しますか?
- 26. log4j.propertiesのこれらのプロパティは何を意味しますか?
- 27. この正規表現は何を意味しますか?
- 28. この演算子は何を意味しますか?
- 29. このSSI条件文で "$"は何を意味しますか?
- 30. これらのエラーメッセージは何を意味しますか?
経験豊富な人には明らかですが、初心者は「他人のものを変えたときに私のオブジェクトが変わるのはなぜですか」と苦労することがよくあります。名前が基本的にポインタを集めているという認識は、ゆっくりと進みます(そして、クローニングがそのプロセスを大幅に高速化することを理解する)。 –