日期:2014-05-20  浏览次数:20676 次

关于对象数组浅克隆的问题,求解答
import java.util.Arrays;

public class O1 {

public static void main(String[] args) {
A a=new A(1);
A b=new A(2);
A[] s1={a,b};
A[] s2=Arrays.copyOf(s1,2);
  System.out.println(s1[0]==s2[0]); //结果为true,说明指向同一对象 引用
System.out.println(s1[0]);
s2[0]=b;
System.out.println(s1[0]);
}

}


class A{
int i;
public A(int i){
this.i=i;
}
public String toString(){
return String.valueOf(i);
}
}




为什么改变是s2[0]的值,却没有改变s1[0]的值呢?

------解决方案--------------------
import java.util.Arrays;

public class O1 {

public static void main(String[] args) {
A a=new A(1);
A b=new A(2);
A[] s1={a,b};
A[] s2=Arrays.copyOf(s1,2);
System.out.println(s1[0]==s2[0]); //结果为true,说明指向同一对象 引用
System.out.println(s1[0]);
s2[0]=b; //当你这重新赋值时已经不是引用同一个对象了 此时输出
System.out.println(s1[0]==s2[0]);//这时就是false
System.out.println(s1[0]);
}

}


class A{
int i;
public A(int i){
this.i=i;
}
public String toString(){
return String.valueOf(i);
}
}