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]的值呢?

解决方案 »

  1.   

    因为s1与s2不是同一个对象.是s1[0]与s2[0]是一个对象.改变了s2[0]的引用,改不了s1[0]的引用.
      

  2.   

    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);
    }
    }
      

  3.   

    很简单吧即便不考虑数组的话:
    你用:
    A x = a;
    A y = x;
    y = b;难道因此x就变了么?
      

  4.   


    System.out.println(s1 == s2); // false
    System.out.println(s1[0] == s2[0]); // true
    自己理解吧
      

  5.   

    s1[0]又不是指向s2[0]你怎么可以指望改变s2[0]的值来改变s1[0]?奇怪的问题