public class ArrayCloneTest {
public static void main(String[] args) {
int [] i ={1,2,3};
MyClass mc1 = new MyClass(i);
MyClass mc2 = (MyClass)mc1.clone();
System.out.println(mc1.i[0] + "\n" + mc1.i[1]
                   + "\n" + mc1.i[2]);
mc2.i[0]=3;
mc2.i[1]=2;
mc2.i[2]=1;

System.out.println(mc1.i[0] + "\n" + mc1.i[1]
                  + "\n" + mc1.i[2]);
}
}class MyClass implements Cloneable{
int [] i;

MyClass(int [] i){
this.i = new int[i.length];
for(int x=0;x<i.length;x++){
this.i[x] = i[x];
}
}
public Object clone(){
Object mc=null;
try{
mc=(MyClass)super.clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
return mc;
}
}
由于数组也是引用所以也会导致拷贝之后拷贝对象和被拷贝对象的这个数组成员变量都指向同一块内存修改一个就会影响两个........请高手指点  拜托了

解决方案 »

  1.   

    你的程序就差一点就对了,你现在拷贝的是那个数组的引用所以修改的还是同一快地址的内容,像我下面修改的就行了:public class ArrayCloneTest {
    public static void main(String[] args) {
    int [] i ={1,2,3};
    MyClass mc1 = new MyClass(i);
    MyClass mc2 = (MyClass)mc1.clone();
    System.out.println(mc1.i[0] + "\n" + mc1.i[1]
                       + "\n" + mc1.i[2]);
    mc2.i[0]=3;
    mc2.i[1]=2;
    mc2.i[2]=1;System.out.println(mc1.i[0] + "\n" + mc1.i[1]
                      + "\n" + mc1.i[2]);
    }
    }class MyClass implements Cloneable{
    int [] i;MyClass(int [] i){
    this.i = new int[i.length];
    for(int x=0;x<i.length;x++){
    this.i[x] = i[x];
    }
    }
    public Object clone(){
    MyClass mc=null;
    try{
    mc=(MyClass)super.clone();
    }catch(CloneNotSupportedException e){
    e.printStackTrace();
    }
    mc.i=(int[])i.clone();//这才是完成深拷贝的
    return mc;
    }
    }
      

  2.   

    感谢感谢原来数组是这样重载了clone方法啊.....