ホームページ  >  記事  >  Java  >  Javaオブジェクトコピーのディープコピーとシャローコピー

Javaオブジェクトコピーのディープコピーとシャローコピー

王林
王林転載
2019-11-25 15:28:282522ブラウズ

Javaオブジェクトコピーのディープコピーとシャローコピー

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 サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。