Java 之浅复制和深复制

来源:互联网 发布:win10重置网络设置 编辑:程序博客网 时间:2024/06/01 22:32

1 浅复制和深复制区别
浅复制:浅复制只是复制本对象的原始数据类型,如int、float、String,对于数组和对象引用等是不会复制的。因此浅复制是有风险的。
深复制:不但对原始数据类型进行复制,对于对象中的数组和对象引用也做复制的行为,从而达到对对象的完全复制。

2 代码示例  下载

Java代码  
  1. package com;  
  2.   
  3. import java.util.ArrayList;  
  4.   
  5. public class Test implements Cloneable {  
  6.   
  7.     // 私有属性  
  8.     private ArrayList<String> nameList = new ArrayList<String>();  
  9.   
  10.     // 添加内容  
  11.     public void add(String s) {  
  12.         this.nameList.add(s);  
  13.     }  
  14.   
  15.     // 获得ArrayList对象  
  16.     public ArrayList<String> get() {  
  17.         return this.nameList;  
  18.     }  
  19.   
  20.     // clone方法  
  21.     @Override  
  22.     public Test clone() {  
  23.         try {  
  24.             Test test = (Test) super.clone();  
  25.             test.nameList = (ArrayList<String>) this.nameList.clone();    //A  
  26.             return test;  
  27.         } catch (CloneNotSupportedException e) {  
  28.             // TODO Auto-generated catch block  
  29.             e.printStackTrace();  
  30.         }  
  31.         return null;  
  32.     }  
  33.   
  34.     /** 
  35.      * @param args 
  36.      */  
  37.     public static void main(String[] args) {  
  38.         // 创建test对象  
  39.         Test test = new Test();  
  40.         // 设置test对象内容  
  41.         test.add("aa");  
  42.         test.add("bb");  
  43.   
  44.         // 打印显示test中的nameList内容  
  45.         System.out.println("test:" + test.get());  
  46.   
  47.         // 克隆test对象生成test2对象  
  48.         Test test2 = test.clone();  
  49.         // 添加"cc"内容到test2对象中  
  50.         test2.add("cc");  
  51.         // 打印显示test2中的nameList内容  
  52.         System.out.println("test2:" + test2.get());  
  53.   
  54.         // 打印显示test中的nameList内容  
  55.         System.out.println("test:" + test.get());  
  56.   
  57.     }  
  58. }  

 

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处的代码。

0 0
原创粉丝点击