84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
次のコードの理由
ディープコピーは実現可能でしょうか?
ringa_lee
これは表面的には「ディープコピー」に見えるだけです 実際には、学生も教授もディープコピーを実装していません。
リーリー
"==" であることがわかります。p.name が設定されていない場合、それらの名前も "==" であるため、ディープコピーは実装されません。 s2.p.name を設定すると、s2.p.name は別の文字列定数のアドレスを指すため、 (s1.p.name == s2.p.name) //false
これは基本的なデータ型のみをコピーできる浅いコピーです。オブジェクトのメンバー変数をコピーするには、メンバー変数の clone メソッドを呼び出す必要があります。これが、複数の浅いコピーで深いコピーを実現できることを私は理解しています。
これはディープコピーではなく、クローンを作成することができます。これは、文字列がまだ元のものを参照していることを意味します。
jdk clone メソッドのデフォルトの実装は値のコピーです。基本的な型の場合、値のコピーが使用されます。参照の場合、コピー参照が指すアドレスです。
このコードがない場合、o.p=(Professor)p.clone();元のオブジェクトの p とクローン オブジェクトは同じ Professor オブジェクトを参照します。これは浅いコピーです。
o.p=(Professor)p.clone();
これは表面的には「ディープコピー」に見えるだけです 実際には、学生も教授もディープコピーを実装していません。
main メソッドにいくつかの出力を追加します。リーリー
s1 と s2 の名前は依然として"==" であることがわかります。p.name が設定されていない場合、それらの名前も "==" であるため、ディープコピーは実装されません。 s2.p.name を設定すると、s2.p.name は別の文字列定数のアドレスを指すため、 (s1.p.name == s2.p.name) //false
これは基本的なデータ型のみをコピーできる浅いコピーです。オブジェクトのメンバー変数をコピーするには、メンバー変数の clone メソッドを呼び出す必要があります。これが、複数の浅いコピーで深いコピーを実現できることを私は理解しています。
これはディープコピーではなく、クローンを作成することができます。これは、文字列がまだ元のものを参照していることを意味します。
jdk clone メソッドのデフォルトの実装は値のコピーです。基本的な型の場合、値のコピーが使用されます。参照の場合、コピー参照が指すアドレスです。
このコードがない場合、
o.p=(Professor)p.clone();
元のオブジェクトの p とクローン オブジェクトは同じ Professor オブジェクトを参照します。これは浅いコピーです。