深拷貝 淺拷貝 賦值

2021-09-26 10:27:51 字數 1512 閱讀 1258

賦值:

class

teacher

class

student

student s1 = new student();

student s2 = s1;

s1 == s2,指向的記憶體區域相同

拷貝:

class

teacher

class

student implement cloneable

}

student s1 = new student();

student s2 = s1.clone();

s1 != s2, 指向不同的記憶體區域

根據 s1.teacher 語 s2.teacher的記憶體區相不相同分為深拷貝和淺拷貝

s1.teacher == s2.teacher 淺拷貝

s1.teacher != s2.teacher 深拷貝

想深拷貝避免不了要使用物件的序列化和反序列化技術,所以:

所有物件至少要實現serializiable

需要拷貝的物件還要實現cloneable,如下:

public object clone()

throws clonenotsupportedexception

finally

retturn null;

}public

static

void

safeclose

(closeable closeable)

}catch

(ioexception e)

}

補充:

可能有的需要將上述clone函式單獨提取出來,將object傳入,那麼就要注意objectinputstream需要防止外部不可信的資料入侵,可以新建safeobjectinputstream類如下:

public

class

safeobjectinputstream

extends

objectinputstream

protected

safeobjectinputstream()

throws ioexception, securityexception

@override

protected class<

?>

resolveclass

(objectstreamclass objectstreamclass)

throws ioexception, classnotfoundexception

throw

newclassnotfoundexception

(objectstreamclass.

getname()

+" not find");

}}

淺拷貝 深拷貝和淺賦值 深賦值

include includeusing namespace std class string else 淺拷貝 也就是系統預設的拷貝,可寫可不寫。string const string s 預設的拷貝構造 深拷貝 string const string s string s2 s1 深賦值 str...

賦值 淺拷貝 深拷貝

堆是動態分配記憶體,記憶體大小不一 棧是自動分配相對固定大小的記憶體空間,並由系統自動釋放 基本資料型別值是不可變的,比較是值的比較 基本資料型別,傳值。開闢乙個新的記憶體空間 js 基本資料型別,儲存在 棧 中,記憶體可以及時 引用型別值是可變的,比較是引用的比較,看其引用是否指向同乙個物件 引用...

賦值 淺拷貝 深拷貝

什麼是深拷貝 使用json.parse json.stringify 是深拷貝 原理是josn物件中的stringify可以把乙個js物件序列化為乙個json字串,parse可以把json字串反序列化為乙個js物件,通過這兩個方法,也可以實現物件的深複製。但是這個方法不能夠拷貝函式。缺點 1 如果物...