小弟刚学习JAVA时间不长,遇到一个问题,希望各位前辈能够指教
当主函数调用CHANGE方法之后,为什么原来已经交换数值的变量没有变化?
public class NewChange{
public static void main(String args[]){
int x=10;
int y=20;
NewChange.change(x,y);
System.out.println("x="+x+",y="+y);
}
public static void change(int x,int y){
int z=0;
z=x;
x=y;
y=z;
System.out.println("x="+x+",y="+y);
}
}
第一次发帖~~希望高手指点~

解决方案 »

  1.   

    这个就是值传递和引用传递的问题了 
    lz自己去了解一下吧 
    这样理解会深刻一点thx
      

  2.   

    java中 基本类型  与 类对象  做参数的时候 是有区别的 
      

  3.   

    用到基本类型传参数,得这样:public class NewChange{
    public static void main(String args[]){
     int[] x = new int[]{10};
     int[] y = new int[]{20};

     change(x,y);
    } public static void change(int[] x,int[] y){
    int[] z= new int[1];
    z[0]=x[0];
    x[0]=y[0];
    y[0]=z[0];
    System.out.println("x="+x[0]+",y="+y[0]);
     }
    }
      

  4.   

    你调用函数的时候,把外面的xy的值分别传给change()函数里面的xy,然后change()开始运行,里面的xy的值的确是调换了,但是外面的和它们没关系,如果你要产生关系,你就要return回去,就是change()这个函数运行完以后,它做了一点事,就是把xy交换了,但是你不跟main()函数说,它又怎么知道你交换了呢。
      

  5.   

    x = x ^ y;
        y = x ^ y;
        x = x ^ y; 
      

  6.   

    Java中的基础数据类型的传递都是值传递,引用类型的数据的是地址传递
    你调用方法是属于值传递,所以不会得到你想要的值
      

  7.   

    public class NewChange{
    public static void main(String args[]){
    int x=10;
    int y=20;
    NewChange.change(x,y);   //这个 x ,y 是会交换值的!
    System.out.println("x="+x+",y="+y);   /*这两个x,y是成员变量,不能用change()方法里面的x,y改变成员变量的值~~楼主不知道你现在懂了没?主要是值传递/引用传递的区别
    */
    }
    public static void change(int x,int y){
    int z=0;
    z=x;
    x=y;
    y=z;
    System.out.println("x="+x+",y="+y);
    }
    }