溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java 淺復制和深復制的實例詳解

發布時間:2020-10-16 23:04:55 來源:腳本之家 閱讀:147 作者:lqh 欄目:編程語言

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處的代碼。

如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女