JAVA 對象拷貝
為什么需要有對象拷貝?
對象拷貝相對的自然是引用拷貝。java初學者經常會問,我這個方法要改變一個對象的屬性,可以把參數傳進去了,為什么沒有改變了?
——基本數據類型傳值,而對象傳引用或引用的拷貝。
而有時候我們要獲取到一個當前狀態的對象復制品,他們是兩個獨立對象。不再是引用或者引用拷貝(實質都是指向對象本身)。就是說a是b的拷貝,b發生變化的時候,不要影響a。
對象拷貝有淺拷貝和深度拷貝兩種。
1)淺拷貝
淺拷貝是指對象中基本數據類型得到拷貝,而引用數據類型并未拷貝。
提到拷貝自然和clone聯系起來了,所有具有clone功能的類都有一個特性,那就是它直接或間接地實現了Cloneable接口。
否則,我們在嘗試調用clone()方法時,將會觸發CloneNotSupportedException異常。
eg:
?2
?3
?4
?5
?6
?7
?8
?9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
運行結果:
xiaogou
2
dagou
2
2)深度拷貝
相對淺拷貝。實現對象中基本數據類型和引用數據類型的拷貝。
請先看下面代碼:
?
?2
?3
?4
?5
?6
?7
?8
?9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
運行結果是:
333
333
而真正要實現拷貝還的加點代碼,如下請對比上面和下面代碼的異同之處:
?2
?3
?4
?5
?6
?7
?8
?9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
colo
發表評論
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元


評論