日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

今天工作中碰到一个clone的问题

發布時間:2025/3/17 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 今天工作中碰到一个clone的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

今天開發中遇到一個問題:

需要將一個對象進行clone,對他的副本的屬性進行修改,供一個特定的對象使用,完成某個需求。

平時對java的clone看的不是很多,相當然的使用了Object的clone()方法:

SomObject obj = new SonObject();


SomObject objClone =obj.clone();

結果發現更新obj的某個成員變量的時候(ArrayList),objClone中的成員變量也相應的發生變化!但是obj.hashCode() 卻不等于objClone.hashCode(),說明他們并沒有指向同一個對象!看到這個結果一下子蒙了,這是為什么呢??

仔細想了一下,恍然大悟:java中的clone是淺拷貝,只是拷貝對象本身,以及基本數據類型,對于對象的非基本數據類型變量,比如ArrayList等,并不進行拷貝!

---------
public class SomObject implements Cloneable{

??? private List wifeList;

??? private int count;

??? ....

??? public Object clone(){
??? ??? try{
??? ??? ??? return super.clone();
??? ??? }catch(....){
??? ??? ??? ....
??? ??? }
??? ??? return null;
??? }
}

SomObject obj = new SomObject();

obj.setCount(1);
obj.setWifeList(new ArrayList("Beautifule"));

SomObjec cloneObj = (SomObject)obj.clone();

obj.setCount(2);
obj.setWifeList(new ArrayList("Tender"));

System.out.println(obj.getCount());//結果 2
System.out.println(obj.getWifeList().get(0));//Tender


System.out.println(cloneObj.getCount());//結果 1
System.out.println(cloneObj.getWifeList().get(0));//Tender

深度clone

??? public Object clone(){
??????? try{
??????? ?SomObject s = (SomObject)super.clone;
??????? ?s.wifeList = (ArrayList)wifeList.clone;
??????????? return s;
??????? }catch(....){
??????????? ....
??????? }
??????? return null;
??? }

轉載于:https://my.oschina.net/play/blog/4511

總結

以上是生活随笔為你收集整理的今天工作中碰到一个clone的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。