淺複製:
被複製物件的所有變數都含有與原來的物件相同的值,而其所有的對其他物件的引用都仍然指向原來的物件。補充:
乙個物件中的字段有的是值型別的,有的是引用型別的。對於值型別字段來說,它的值就是簡單的值,而對於引用型別來說,它的值是位址。例子:淺複製在複製時,將這個物件的值字段和引用字段(均為非靜態字段)全部複製過去,獲得了這個物件的值和位址。
基礎類:publicclass person
public
int age
}public
class baseclass
///
/// 引用型別
///
public person p
public baseclass clone()
}
頁面:深複製:public partial class calculate_default : system.web.ui.page}; baseclass bc2 = bc1;
baseclass bc3 = bc1.clone();
//true
response.write((bc1 == bc2).tostring() + "
"); //false
response.write((bc1 == bc3).tostring() + "
"); //false
response.write((bc2 == bc3).tostring() + "
"); bc1.p.name = "changed";
//changed
response.write(bc1.p.name + "
"); //changed
response.write(bc2.p.name + "
"); //changed
response.write(bc3.p.name + "
"); }
}
被複製物件會將所有非引用型別的字段複製給新物件,同時將引用型別所指向位址中存的物件複製給新的物件。基礎類:
頁面**:publicclass person
public
int age
public person clone()
}public
class baseclass
///
/// 引用型別
///
public person p
///
/// 增加此空建構函式是為了使物件初始化器使用
///
public baseclass()
///
/// 此為內部複製引用型別字段使用,
/// 注意:person類增加了乙個方法
///
///
baseclass(person p)
public baseclass clone()
}
區別:public partial class calculate_default : system.web.ui.page}; baseclass bc2 = bc1;
baseclass bc3 = bc1.clone();
//true
response.write((bc1 == bc2).tostring() + "
"); //false
response.write((bc1 == bc3).tostring() + "
"); //false
response.write((bc2 == bc3).tostring() + "
"); bc1.p.name = "changed";
//changed
response.write(bc1.p.name + "
"); //changed
response.write(bc2.p.name + "
"); //www
response.write(bc3.p.name + "
"); }
}
淺複製和深複製的區別僅在於對引用型別的對待上,乙個是複製的位址,乙個是複製的位址指向位置的資料.
淺複製和深複製
在c 中,下面三種物件需要呼叫拷貝建構函式 有時也稱 複製建構函式 1 乙個物件作為函式引數,以值傳遞的方式傳入函式體 全域性函式,傳入的是物件 void g fun resume c 2 乙個物件作為函式返回值,以值傳遞的方式從函式返回 全域性函式 返回的是物件 resume g fun 3 乙個...
深複製和淺複製
以下 是否完全正確,執行可能得到的結果是 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 class a class b b void sayhello b b int main 程式正常執行 程式編譯錯誤 程式崩潰 程式死迴圈 這個程式會直接崩潰 voidsayhello ...
深複製和淺複製
main.m 深複製和淺複製。created by yaomars on 16 4 27.import 建立乙個nsdictionary,並建立可變副本和不可變副本,說下是深複製還是淺複製。int main int argc,const char argv 第三種方式 建立乙個nsdictionar...