方法调用时发生 值 传递。main中建立的x并不是change(int x[])中的x,
当执行到change(x);的时候,change()方法生成local变量x,该x指向change()中建立的y,与main中的x,无干。
我表达的不够清楚,希望有帮助于你

解决方案 »

  1.   

    JAVA的参数都是值参,所以函数内的x=y不会影响函数外的x,但由于x数组,它传到函数内的是数组的引用,你可以对它的元素赋值达到你想要的效果:
    public static void change(int x[]){
      int y[]={21,22,23,24,25};
      for (int i=0; i<x.length; i++) {
        x[i] = y[i];        
      }
    }
      

  2.   

    thinking in java讲的很清楚,建议看看。
    X(main)与X(change)实际上指向同一内存地址,如果在change()方法内执行:
    x[0]=100;你再看效果,肯定变了。
      

  3.   

    数组x[]与方法引用display(x)中的x是一个变量吗?
    是程序运行结果却没有改变值请问为什么?
    因为java中数组是作为对象的,对它的调用是按句柄传递的,但句柄本身按值传递。在方法中可以改变它引用的对象,使它指向其它数组,并对新的数组进行操作,担从方法返回后,它仍然指向原来的数组。
    但看看下面的,比较一下就知道了:
    public class ArrayArgument{
    public static void main(String args[]){
    int x[]={11,12,13,14,15};
    display(x);
    change(x);
    display(x);
    }
    public static void change(int x[]){
                    for(int i = 0 ; i < 5 ; i++) x[i] = i + 1;
    int y[]={21,22,23,24,25};
    x=y;
                    for(int i = 0 ; i < 5 ; i++) x[i] = i + 31;
                    display(y);
    }
    public static void display(int x[]){
    for(int i=0;i<x.length;i++)
    System.out.print(x[i]+" ");
    System.out.println(" ");
    }
    }
      

  4.   

    补充说明一下,该现象针对的是数组(包括built-in type 数组),和object,单纯的built-in type不在范围内。
      

  5.   

    朋友:
    能对下面的代码解除释吗?
    public class ArrayArgument{
    public static void main(String args[]){
    int x[]={11,12,13,14,15};
    display(x);
    change(x);
    display(x);
    }
    public static void change(int x[]){
                    for(int i = 0 ; i < 5 ; i++) x[i] = i + 1;
    int y[]={21,22,23,24,25};
    x=y;
                    for(int i = 0 ; i < 5 ; i++) x[i] = i + 31;
                    display(y);
    }
    public static void display(int x[]){
    for(int i=0;i<x.length;i++)
    System.out.print(x[i]+" ");
    System.out.println(" ");
    }
    }
      

  6.   

    for(int i = 0 ; i < 5 ; i++) x[i] = i + 1;
      //这时x还是指向原来数组,所以对x中的元素的改变是有效的
    int y[]={21,22,23,24,25};
    x=y;
      //这时x指向了数组y
    for(int i = 0 ; i < 5 ; i++) x[i] = i + 31;
    display(y);
      //由于x指向数组y,对x的改变实质上是改变了y中的元素//从方法返回后,它仍然指向原来的数组,但此时它的值已经变为{1,2,3,4,5}了。
      

  7.   

    哎,简单看了一下楼主的问题,我想说:
    除原始类型,其它类型(也就是引用类型)都是传引用调用的。
    但是,要想使改动在调用方法里有效,被调方法里只能对传进来的对象做内容上的变动,对句柄重新赋值毫无意义。
    比如:
    void f(StringBuffer sb) {
        sb.append("ok");//有效
        sb = new StringBuffer();//无效
    }明白了吗?特别的,对于不可变类,如java.lang.String,java.math.BigDecimal永远无法达到那样的效果。