深轉殖 使用序列化進行轉殖

2021-07-31 08:43:27 字數 1117 閱讀 4522

淺轉殖:原始型別為值傳遞,物件型別仍為引用傳遞。

深轉殖:所有元素或屬性均完全複製,與原物件完全脫離,也就是說所有對於新物件的修改都不會反映到原物件中。

這裡主要講深轉殖,要轉殖序列化的物件,只需將物件序列化輸入位元組流中,然後再從位元組流讀出,這樣就可以建立乙個新的物件了,新物件和母物件不存在引用共享問題,真正實現對像的深轉殖。

public

class

serialcloneable

implements

cloneable, serializable catch (ioexception e) catch (classnotfoundexception e)

return

null;}}

需轉殖的物件

public

class

employee

extends

serialcloneable

public string getname()

public

void

setname(string name)

public

double

getsalary()

public

void

setsalary(double salary)

public date gethireday()

public

void

sethireday(date hireday)

@override

public string tostring()

public

void

raisesalary(double bypercent)

}

測試

可以看出,當母物件的salary值發生改變,並沒有影響到子物件,因為使用深轉殖他們就不存在引用共享問題

序列化與物件轉殖

對於深轉殖而言,如果類有很多的引用型別域,那麼重寫clone 方法依次複製各個域是很麻煩。如果引用型別的域也是油引用型別組成的,則應該考慮使用序列化的方式實現深轉殖,下面給出乙個例子 1 編寫乙個address類,該類定義了3個域,國家,省份和城市。public class address impl...

JS如何進行物件的深轉殖(深拷貝)

js中,一般的賦值傳遞的都是物件 陣列的引用,並沒有真正的深拷貝乙個物件,如何進行物件的深拷貝呢?var a var b a b.name jone console.log a.name jone 上述 中,b指向a所指向的棧物件,也就是說a,b指向同乙個棧物件,這種屬於物件的淺拷貝。var a v...

JS如何進行物件的深轉殖(深拷貝)?

js中,一般的賦值傳遞的都是物件 陣列的引用,並沒有真正的深拷貝乙個物件,如何進行物件的深拷貝呢?var a var b a b.name jone console.log a.name jone 上述 中,b指向a所指向的棧物件,也就是說a,b指向同乙個棧物件,這種屬於物件的淺拷貝。var a v...