JAVA 對(duì)象拷貝
為什么需要有對(duì)象拷貝?
對(duì)象拷貝相對(duì)的自然是引用拷貝。java初學(xué)者經(jīng)常會(huì)問(wèn),我這個(gè)方法要改變一個(gè)對(duì)象的屬性,可以把參數(shù)傳進(jìn)去了,為什么沒(méi)有改變了?
——基本數(shù)據(jù)類型傳值,而對(duì)象傳引用或引用的拷貝。
而有時(shí)候我們要獲取到一個(gè)當(dāng)前狀態(tài)的對(duì)象復(fù)制品,他們是兩個(gè)獨(dú)立對(duì)象。不再是引用或者引用拷貝(實(shí)質(zhì)都是指向?qū)ο蟊旧恚>褪钦f(shuō)a是b的拷貝,b發(fā)生變化的時(shí)候,不要影響a。
對(duì)象拷貝有淺拷貝和深度拷貝兩種。
1)淺拷貝
淺拷貝是指對(duì)象中基本數(shù)據(jù)類型得到拷貝,而引用數(shù)據(jù)類型并未拷貝。
提到拷貝自然和clone聯(lián)系起來(lái)了,所有具有clone功能的類都有一個(gè)特性,那就是它直接或間接地實(shí)現(xiàn)了Cloneable接口。
否則,我們?cè)趪L試調(diào)用clone()方法時(shí),將會(huì)觸發(fā)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

運(yùn)行結(jié)果:
xiaogou
2
dagou
2
2)深度拷貝
相對(duì)淺拷貝。實(shí)現(xiàn)對(duì)象中基本數(shù)據(jù)類型和引用數(shù)據(jù)類型的拷貝。
請(qǐng)先看下面代碼:
?

?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

運(yùn)行結(jié)果是:
333
333
而真正要實(shí)現(xiàn)拷貝還的加點(diǎn)代碼,如下請(qǐng)對(duì)比上面和下面代碼的異同之處:

?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
- 2008-04-28 11:52
- 瀏覽 274
- 評(píng)論(0)
- 分類: 編程語(yǔ)言
- 相關(guān)推薦
發(fā)表評(píng)論
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

評(píng)論