技术开发 频道

Java里面的对象克隆

  【IT168 文档】java里面的对象克隆:实际存在的对象拷贝几份!

  即将一个实际的对象进行多份拷贝

package xsocket.server;

public class Test implements Cloneable {
    
private String name;
    
public void setName(String arg) {
        
this.name = arg;
    }
    
public String getName() {
        
return this.name;
    }
    
public Object clone() throws CloneNotSupportedException {
        
return super.clone();
    }
    
public static void main(String[] args) throws CloneNotSupportedException {
        Test shepp
= new Test();
        shepp.setName(
"first");
        System.out.println(shepp.getName());
        Test sheppclone
= (Test)shepp.clone();  //对象拷出来一份副本
        System.out.println(sheppclone.getName());
        
        System.out.println(
"shepp == sheppclose" + (shepp == sheppclone));
    }
}

  要知道== 表示的是同一份对象。这里面的内存位置是不一样的哦。所以==就不一样了!

package xsocket.server;

public class Test implements Cloneable {
    
private String name;
    
public void setName(String arg) {
        
this.name = arg;
    }
    
public String getName() {
        
return this.name;
    }
    
public Object clone() throws CloneNotSupportedException {
        
return super.clone();
    }
    
public static void main(String[] args) throws CloneNotSupportedException {
        Test shepp
= new Test();
        shepp.setName(
"first");
        Test shepp2
= shepp;  //只是将两个值指向了同一个对象了所以会相互影响到对方的值!
        System.out.println(shepp2.getName());
        Test shepp3
= (Test)shepp.clone();//再做一个实际的副本出来就不会相互影响的!
        shepp3.setName("another");
        System.out.println(shepp3.getName());
        System.out.println(shepp.getName());
    }
}

  输出:

  first

  another

  first

  (这就是拷贝的好处了!)

  要考虑一下什么时候用浅clone什么时候用深clone

0
相关文章