如果这个对象的所属类实现了clone()方法,就可以通过该对象的该方法获得一个克隆的对象,它们的属性值都相等,但内存地址不一样,也就是说是两个对象

解决方案 »

  1.   

    能否给出clone()方法到例子
      

  2.   

    我重载了clone()方法,但还需要作什么修改呢,能否给出一个例子?
      

  3.   

    http://community.csdn.net/Expert/topic/3641/3641511.xml?temp=.4475977
      

  4.   

    给你些例子(也是论坛里的):class ATest{
    private int a;
    ATest(int i){ a = i; }
    void set(int i) { a = i; }
    int get(){ return a; }
    }class ATestClone implements Cloneable{
    private int a;
    ATestClone(int i){ a = i; }
    void set(int i) { a = i; }
    int get(){ return a; }

    public Object clone(){
    Object o = null;
    try{
    o = super.clone();
    }catch(CloneNotSupportedException e){
    System.err.println("Can not clone");
    }
    return o;
    }
    }public class ArrayCopy{ static void print(ATest[] s){
    for(int i = 0; i <s.length; i++ ){
    System.out.println(s[i].get());;
    }
    } static void print(ATestClone[] s){
    for(int i = 0; i <s.length; i++ ){
    System.out.println(s[i].get());;
    }
    } public static void main(String args[]){
    ATest[] arr = new ATest[5];
    for(int i = 0; i < arr.length; i++ ){
    arr[i] = new ATest(i);
    }

    /**
    //测试 1
    //ATest[] arrCopy = new ATest[arr.length];
    //System.arraycopy(arr, 0, arrCopy, 0, arr.length);//使用此方法,更新arrCopy同时会更新arr

    System.out.println("befor updated");
    print(arrCopy); 
    print(arr);

    System.out.println("after updated");
    arrCopy[0].set(100);
    print(arrCopy);
    print(arr);
    */ /**
    //测试 2
    ATest[] arrClone = (ATest[])arr.clone();//效果同System.arraycopy(),只是浅拷贝

    System.out.println("befor updated");
    print(arrClone); 
    print(arr);

    System.out.println("after updated");
    arrClone[0].set(100);
    print(arrClone);
    print(arr);
    */ //测试 3
    //深拷贝
    ATestClone[] arr2 = new ATestClone[5];
    for(int i = 0; i < arr.length; i++ ){
    arr2[i] = new ATestClone(i);
    }

    //first, clone array
    //ATestClone[] arrClone = (ATestClone[])arr2.clone();
    ATestClone[] arrClone = new ATestClone[arr2.length];

    //then clone each object of this array
    for(int i = 0; i < arr2.length; i++ ){
    arrClone[i] = (ATestClone)arr2[i].clone();
    }


    System.out.println("befor updated");
    print(arrClone); 
    print(arr2);

    System.out.println("after updated");
    arrClone[0].set(100);
    print(arrClone);
    print(arr2);
    }
    }