Java 淺復制和深復制的實例詳解
1 淺復制和深復制區別
淺復制:淺復制只是復制本對象的原始數據類型,如int、float、String,對于數組和對象引用等是不會復制的。因此淺復制是有風險的。
深復制:不但對原始數據類型進行復制,對于對象中的數組和對象引用也做復制的行為,從而達到對對象的完全復制。
2 代碼示例
package com; import java.util.ArrayList; public class Test implements Cloneable { // 私有屬性 private ArrayList<String> nameList = new ArrayList<String>(); // 添加內容 public void add(String s) { this.nameList.add(s); } // 獲得ArrayList對象 public ArrayList<String> get() { return this.nameList; } // clone方法 @Override public Test clone() { try { Test test = (Test) super.clone(); test.nameList = (ArrayList<String>) this.nameList.clone(); //A return test; } catch (CloneNotSupportedException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } /** * @param args */ public static void main(String[] args) { // 創建test對象 Test test = new Test(); // 設置test對象內容 test.add("aa"); test.add("bb"); // 打印顯示test中的nameList內容 System.out.println("test:" + test.get()); // 克隆test對象生成test2對象 Test test2 = test.clone(); // 添加"cc"內容到test2對象中 test2.add("cc"); // 打印顯示test2中的nameList內容 System.out.println("test2:" + test2.get()); // 打印顯示test中的nameList內容 System.out.println("test:" + test.get()); } }
3 淺復制運行結果
test:[aa, bb] test2:[aa, bb, cc] test:[aa, bb, cc]
4 深復制運行結果
test:[aa, bb] test2:[aa, bb, cc] test:[aa, bb]
5 結果分析
從結果分析和代碼來看,深復制對淺復制只是多了A處的代碼。
如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。