ホームページ  >  に質問  >  本文

Javaディープコピーに関する質問

次のコードの理由

リーリー

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

リーリー
ringa_leeringa_lee2712日前469

全員に返信(4)返信します

  • 巴扎黑

    巴扎黑2017-05-17 10:09:33

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

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

    リーリー

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

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

    返事
    0
  • 淡淡烟草味

    淡淡烟草味2017-05-17 10:09:33

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

    返事
    0
  • 天蓬老师

    天蓬老师2017-05-17 10:09:33

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

    返事
    0
  • 淡淡烟草味

    淡淡烟草味2017-05-17 10:09:33

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

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

    返事
    0
  • キャンセル返事