淺複製 深複製 clone

2021-06-26 22:39:10 字數 1254 閱讀 1204

clone與cloneable的關係

clone是object的乙個方法,cloneable是乙個標記介面。

任何類都有clone()方法,但是只有實現了cloneable介面才能呼叫該方法,否則丟擲clonenotsupportedexception異常。

淺複製:淺拷貝:僅複製引用,即兩個引用指向同乙個物件。

string astring = "hello";

string bstring = astring;

深複製:不僅複製引用,還複製內容

class professor0 implements cloneable 

public object clone() throws clonenotsupportedexception

}class student0 implements cloneable

public object clone() catch (clonenotsupportedexception e)

return o; }}

public class c

}學生s1的姓名:zhangsan

學生s1教授的姓名:lisi,

學生s1教授的年紀30

學生s2的姓名:z

學生s2教授的姓名:lisi,

學生s2教授的年紀30

說明:從輸出可以看出:當s2改變教授資訊時,s1也跟著改變,但是當改變s2的成員變數時,s1的成員變數沒變。這是由於clone方法中沒有對成員引用進行複製。

結論:clone方法只會複製基本屬性,但是不會複製引用成員。

複製深度由clone的實現決定:

class professor implements cloneable 

public object clone() catch (clonenotsupportedexception e)

return o;

}} class student implements cloneable

public object clone() catch (clonenotsupportedexception e)

o.p = (professor) p.clone();

return o;

}} public class c

}name=wangwu,age=50

name=lisi,age=30

php引用複製,淺複製clone和深複製

1.引用複製 class a a new a b a 引用賦值 a info 10 echo a info.echo b info.die 結果如下 2.淺複製clone class a a new a b clone a clone a info 10 echo a info.echo b inf...

淺複製 深複製

second,來說說shallow copy and deep copy的定義和我自己的一些理解。僅供參考 淺複製 shallow copy 如果欄位是值型別的。則對該字段執行逐位複製,如果欄位是引用型別,則複製引用但不複製引用的物件 因此,原始物件及其副本引用同一物件。即被複製物件的所有變數都含有...

深複製 淺複製

深複製又叫深拷貝 淺複製又叫淺拷貝 位拷貝。為了理解什麼叫深複製和淺複製,我們舉乙個例子,假如我們有乙個類叫cdemo,有兩個成員,a 和 str.class cdemo 我們再定義乙個建構函式 cdemo int pa,char cstr 然後執行 cdemo a 10,hello cdemo b...