Javaディープコピーに関する質問
ringa_lee
ringa_lee 2017-05-17 10:07:33
0
4
490

次のコードの理由

リーリー

ディープコピーは実現可能でしょうか?

リーリー
ringa_lee
ringa_lee

ringa_lee

全員に返信(4)
巴扎黑

これは表面的には「ディープコピー」に見えるだけです 実際には、学生も教授もディープコピーを実装していません。

main メソッドにいくつかの出力を追加します。

リーリー

s1 と s2 の名前は依然として

"==" であることがわかります。p.name が設定されていない場合、それらの名前も "==" であるため、ディープコピーは実装されません。 s2.p.name を設定すると、s2.p.name は別の文字列定数のアドレスを指すため、 (s1.p.name == s2.p.name) //false

いいねを押す +0
淡淡烟草味

これは基本的なデータ型のみをコピーできる浅いコピーです。オブジェクトのメンバー変数をコピーするには、メンバー変数の clone メソッドを呼び出す必要があります。これが、複数の浅いコピーで深いコピーを実現できることを私は理解しています。

いいねを押す +0
Peter_Zhu

これはディープコピーではなく、クローンを作成することができます。これは、文字列がまだ元のものを参照していることを意味します。

いいねを押す +0
淡淡烟草味

jdk clone メソッドのデフォルトの実装は値のコピーです。基本的な型の場合、値のコピーが使用されます。参照の場合、コピー参照が指すアドレスです。

このコードがない場合、o.p=(Professor)p.clone();元のオブジェクトの p とクローン オブジェクトは同じ Professor オブジェクトを参照します。これは浅いコピーです。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート