//淺拷貝與深拷貝
//淺拷貝:被複製物件的所有變數都含有與原來的物件相同的值,而所有的對其他物件的引用仍然指向原來的物件。
//換言之,淺複製僅僅複製所考慮的物件,而不複製它所引用的物件。
//深拷貝:被複製物件的所有變數都含有與原來的物件相同的值,除去那些引用其他物件的變數。
//那些引用其他物件的變數將指向被複製過的新物件,而不再是原有的那些被引用的物件。
//換言之,深複製把要複製的物件所引用的物件都複製了一遍。
//1、直接賦值(字串外都屬於淺拷貝)
//2、使用建構函式(深拷貝)
//3、使用clone()方法(深拷貝)
//字串(不理解無colne()方法)
string s="sss";
string t=s; //深拷貝
string y=new string(s); //深拷貝
system.out.println("s:"+s+" t:"+t+" y:"+y);
t="ttt";
y="yyy";
system.out.println("s:"+s+" t:"+t+" y:"+y);
//陣列
string ss=;
string tt=ss; //淺拷貝
string ww=(string)ss.clone();//深拷貝
system.out.println("ss:"+ss[1]+" tt:"+tt[1]+" ww:"+ww[1]);
tt[1]="2t2";
ww[1]="2w2";
system.out.println("ss:"+ss[1]+" tt:"+tt[1]+" ww:"+ww[1]);
//list列表
arraylist a=new arraylist();
for(int i=0;i<10;i++)
arraylist b=a;//淺拷貝
arraylist c=new arraylist(a);//深拷貝
arraylist d=(arraylist)a.clone();//深拷貝
system.out.println("a:"+a.get(1)+" b:"+b.get(1)+" c:"+c.get(1)+" d:"+d.get(1));
b.set(1, "bbb");
c.set(1, "ccc");
system.out.println("a:"+a.get(1)+" b:"+b.get(1)+" c:"+c.get(1)+" d:"+d.get(1));
//hashmap
hashmap h=new hashmap();
h.put("1", "hhh");
hashmap m=h;//淺拷貝
hashmap p=new hashmap(h);//深拷貝
hashmap n=(hashmap)h.clone();//深拷貝
system.out.println("h:"+h.get("1")+" m:"+m.get("1")+" p:"+p.get("1")+ " n:"+n.get("1"));
m.put("1", "mmm");
p.put("1","ppp");
n.put("1", "nnn");
system.out.println("h:"+h.get("1")+" m:"+m.get("1")+" p:"+p.get("1")+ " n:"+n.get("1"));
Java深拷貝與淺拷貝
深拷貝與淺拷貝主要的不同是對於引用變數的拷貝,淺拷貝的引用變數不僅僅是拷貝乙個引用 位址 引用變數的成員也一樣深拷貝。廢話少說下面是兩個拷貝的例子 1.淺拷貝 1 package com.lightcopy 23 public class professor implements cloneable...
「淺拷貝」與「深拷貝」
c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...
淺拷貝與深拷貝
淺拷貝 1 2 myclass a,b a b 為了封裝性和解耦,同型別的兩個物件之間進行賦值操作時,所有成員變數被複製,包括私有成員 指標變數。類的成員函式在傳遞或返回物件時都會進行物件複製產生臨時物件,比如函式呼叫時實參變為形參,以及函式返回物件。考慮到效能和使用者要求不同,編譯器不複製物件內部...