java 对象深层复制,浅复制

 不能用等号,等号为引用,赋值的只是地址,指向同一内存区域,即同一对象引用

 

  
  
  
  
  1. //浅拷贝与深拷贝 
  2.         //浅拷贝:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。 
  3.         //换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。 
  4.         //深拷贝:被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。 
  5.         //那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。 
  6.         //换言之,深复制把要复制的对象所引用的对象都复制了一遍。 
  7.         //1、直接赋值(字符串外都属于浅拷贝) 
  8.         //2、使用构造函数(深拷贝) 
  9.         //3、使用clone()方法(深拷贝) 
  10.          
  11.         //字符串(不理解无colne()方法) 
  12.         String s="sss"
  13.         String t=s;   //深拷贝 
  14.         String y=new String(s); //深拷贝 
  15.         System.out.println("s:"+s+" t:"+t+" y:"+y); 
  16.         t="ttt"
  17.         y="yyy"
  18.         System.out.println("s:"+s+" t:"+t+" y:"+y); 
  19.          
  20.         //数组  
  21.         String[] ss={"111","222","333"}; 
  22.         String[] tt=ss; //浅拷贝 
  23.         String[] ww=(String[])ss.clone();//深拷贝 
  24.         System.out.println("ss:"+ss[1]+" tt:"+tt[1]+" ww:"+ww[1]); 
  25.         tt[1]="2t2"
  26.         ww[1]="2w2"
  27.         System.out.println("ss:"+ss[1]+" tt:"+tt[1]+" ww:"+ww[1]); 
  28.          
  29.          
  30.         //list列表         
  31.         ArrayList a=new ArrayList(); 
  32.         for(int i=0;i<10;i++){ 
  33.             a.add(String.valueOf(i+1)); 
  34.         } 
  35.         ArrayList b=a;//浅拷贝 
  36.         ArrayList c=new ArrayList(a);//深拷贝 
  37.         ArrayList d=(ArrayList)a.clone();//深拷贝 
  38.         System.out.println("a:"+a.get(1)+" b:"+b.get(1)+" c:"+c.get(1)+" d:"+d.get(1)); 
  39.         b.set(1"bbb"); 
  40.         c.set(1"ccc"); 
  41.         System.out.println("a:"+a.get(1)+" b:"+b.get(1)+" c:"+c.get(1)+" d:"+d.get(1)); 
  42.          
  43.         //HashMap 
  44.         HashMap h=new HashMap(); 
  45.         h.put("1""hhh"); 
  46.         HashMap m=h;//浅拷贝 
  47.         HashMap p=new HashMap(h);//深拷贝 
  48.         HashMap n=(HashMap)h.clone();//深拷贝 
  49.         System.out.println("h:"+h.get("1")+" m:"+m.get("1")+" p:"+p.get("1")+ " n:"+n.get("1")); 
  50.         m.put("1""mmm"); 
  51.         p.put("1","ppp"); 
  52.         n.put("1""nnn"); 
  53.         System.out.println("h:"+h.get("1")+" m:"+m.get("1")+" p:"+p.get("1")+ " n:"+n.get("1")); 

 

你可能感兴趣的:(java,深层复制)