代码如下:public class ArrayParameters
{  public static void changeOrNot(int i, double x[])
   {  i = -1;
      x[0] = -2.0;
      double y[] = x;
      y[1] = -3.0;
      double z[] = {-4,-4,-4};
      x = z;   //这里为什么是不可见操作?已经知道X的值是从A中拷贝而来的,但为什么A没变化
   }
   public static void main(String args[])
   {  int k = 1;
      double A[] = {1.0, 2.0, 3.0};
      changeOrNot(k, A);
      System.out.println("k: " + k);
      System.out.println("A[0]: " + A[0]);
      System.out.println("A[1]: " + A[1]);
      System.out.println("A[2]: " + A[2]);
   }
}结果
k: 1
A[0]: -2.0
A[1]: -3.0
A[2]: 3.0  //

解决方案 »

  1.   

    因为你并不是改变了x原来的值,而是改变了x的指向在你执行x = z之前,你可以认为x和外面的A是指向同一个对象的但你一旦执行了 x = z , x 已经和外面的A不再是同一个对象,所以这样的改变是不会影响外面的A的
      

  2.   

    谢谢,好像懂了,X=Z的赋值是成功的,但执行到这一步,X指向A的内存换成X指向Z了,所以这里的操作对A来说是并没有变化,对伐,
      

  3.   

    http://community.csdn.net/Expert/topic/3878/3878530.xml?temp=.1985285