首頁  >  文章  >  Java  >  java物件拷貝之深拷貝與淺拷貝

java物件拷貝之深拷貝與淺拷貝

王林
王林轉載
2019-11-25 15:28:282539瀏覽

java物件拷貝之深拷貝與淺拷貝

1、要實作物件拷貝必須實作一個Cloneable接口,如果不實作這個接口就會產生一個CloneNotSupportedException異常。其實這個介面一個方法都沒有,因此這類介面常被稱為標記介面。

2、Object 中有一個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中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除