小弟刚学习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.   

    非对象是值传递 int 等等 是复制过去了 建议看看参数传递
      

  2.   

    http://wenku.baidu.com/view/0f828636f111f18583d05a39.html
      

  3.   

    举个例子:
    变量就是容器,假设某个超市(就是函数)它提供一种功能,给你交换两个容器中的东西.实际情况是这样的:超市有自己的容器(函数的参数),你给它东西的时候,是把东西倒进它们的容器里(因为是基本变量,只把里边的东西倒(复制)过去),然后超市就交换它的两容器里的东西,用来A杯装牛奶,B杯装酒,换成了
    B杯装牛奶,A装酒,但它并没有改变你的杯子里的东西啊.你调用它的时候只是复制了值.你的杯子里装的还是原来的东西代码的顺序:
    自己的东西
    复制给超市(调用函数)
    输出自己杯子里的东西.
    超市没有改变自己杯子里的东西,所以没有完成交换,因为是各自的杯子.
      

  4.   

    基本数据类型都是值传递,实际上在你的change函数里的x,y只是main函数x,y的一个备份,你改变的只是备份,所以当change结束后,change的x,y就销毁了,main的x,y并没有因此改变。
    推荐文章:http://www.hudong.com/wiki/java%E4%BC%A0%E5%80%BC%E5%92%8C%E4%BC%A0%E5%BC%95%E7%94%A8
      

  5.   

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

  6.   

    ..java中是传值..不存在传地址
      

  7.   

       public static void main(String args[])
       {
      int x=10;
      int y = 20;
      System.out.println(x=y + (y=x)*0);
       
       System.out.println("x="+x);
       System.out.println("y="+y);
       }这样就可以直接出来了