1. オブジェクトのコピーを実装するには、Cloneable インターフェイスを実装する必要があります。このインターフェイスが実装されていない場合は、CloneNotSupportedException が生成されます。実際、このインターフェイスには単一のメソッドがないため、このタイプのインターフェイスはマーカー インターフェイスと呼ばれることがよくあります。
2. オブジェクトには浅いコピーを実装する clone() メソッドがあります。基本データ型のメンバー変数の場合、浅いコピーは値を直接転送します。つまり、属性値を新しいオブジェクトにコピーするため、基本データ型は直接浅いコピーできます。
Date オブジェクトなどの可変データ型の場合、ディープ コピーを実装する必要があります。もちろん、Date クラス自体は clone() メソッドを実装しますが、たとえば String クラスは clone( ) メソッドを使用するのは、String オブジェクトができないためです。メモリ内の文字シーケンスを変更するために、そのライフサイクルで文字シーケンスを変更する方法はありません。異なるオブジェクトの同様の属性が同じ String を参照している場合は問題ありません。
Java 学習ビデオ チュートリアル: Java 学習ビデオ
例は次のとおりです:
public class Main{ public static void main(String[] args){ } } class Employee implements Cloneable{ private int id; private Date date; public Employee(){} public Employee(int id){ this.id=id; this.date=new Date(); } @Override public Employee clone() throws CloneNotSupportedException{ Object t=super.clone();//此时的object中的拷贝只是浅拷贝 Employee clone=(Employee)t; clone.date=this.data.clone();//date类实现了深拷贝,直接调用即可 return clone; } } class Mannager extends Employee{ private String name; public Mannager(){ super(); } public Mannager(String name,int id){ super(id); this.name=name; } @Override public Mannager clone(){ Employee t=super.clone();//先把id date属性复制 Mannager clone=(Mannager)t; clone.name=t.name;//String 对象直接赋值引用 return clone; } }
その他の Java 関連記事の推奨事項: Java 入門チュートリアル
以上がJavaオブジェクトコピーのディープコピーとシャローコピーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。