java中的clone方法性能_Java中Clone方法的淺復制和深復制

程序運行的結果為:

a:0

b:1

在實際編程中,經常會遇到從某個已有的對象A創建出另外一個與A具有相同狀態的對象B,並且對B的修改不會影響到A的情況,例如Prototype(原型)模式中,就需要clone一個對象實例。在Java語言中,僅僅通過簡單的賦值操作顯然無法達到這個目的,而Java提供了一個簡單有效的clone()方法來滿足這個需求。

Java中所有的類默認都集成Object類,而Object類中提供了一個clone()方法。這個方法的作用是返回一個Object對象的復制。這個復制函數返回的是一個新的對象而不是一個應用。那么怎樣使用這個方法呢?以下是使用clone()方法的步驟。

1、實現clone()的類,首先需要集成Cloneable接口。Cloneable接口實質上是一個標識接口,沒有任何接口方法。

2、在類中重寫Object類中的clone()方法

3、在clone方法中調用super.clone()方法。無論clone類的繼承結構是什么,super.clone()都會直接或間接的調用java.lang.Object類的clone方法。

4、把淺復制的引用指向原型對象新的克隆體。

淺復制和深復制

Java語言在重載clone()方法時也會出現同樣的問題,當類中只有一些基本的數據類型時,采用上述方法就可以了,但是當類中包含了一些對象時,就需要用到深復制了,實現方法是對對象調用clone方法完成復制后,接着對對象中的非解百納類型的屬性也調用clone()方法完成深復制。具體事例如下:

運行結果為:

a:Sat Mar 28 19:46:34 CST 2015

b:Thu May 28 19:46:34 CST 2015

確保類中包含的所有非基本類型的成員變量都實現了深復制

Object o=super.clone();     //先執行淺復制

對每一個對象attr執行下列語句

o.attr=this.getAttr().clone();

淺復制和深復制區別:

淺復制:被復制對象的所有變量都含有與原來對象相同的值,而所有對象的其他對象的引用仍然指向原來的對象。換言之,淺復制所考慮的對象,而不復制它所引用的對象。

深復制:被復制對象的所有變量都含有與原來對象相同的值,除去那些引用其他對象的變量。哪些引用其他對象的變量將指向被復制的新對象,而不再是原有的那些被引用的對象。深復制的對象所引用的對象都復制了一遍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值