class Swap{
public Swap(int x,int y){
int temp = x;
x = y;
y = temp;

}

public static void main(String [] args){
int a = 2,b = 3;
System.out.println("a="+a+" b="+b);
    new Swap(a,b);
System.out.println("a="+a+" b="+b);    
}
}两次输出的结果怎么都是a=2, b=3 了
为什么没变化?

解决方案 »

  1.   

    这个问题是初学者经常碰到的。首先,你要记住,Java的参数传递全都是值传递。有的书上说基本类型是值传递,而对象是引用传递,但引用本身传递的也是值,引用的值可以看成是对象的地址。所以,函数里面的变量值不认如何改变,不会影响到函数外的变量,所以两次输出是一样的。如果传递的是引用,比如f(Object o),相当于把函数外一个对象的引用传递给了函数里面,也就是说,函数里面也可以访问函数外创建的对象,这样可以更改这个对象的状态。
      

  2.   

    因为它们都是基本类型,按值传递了。
    传到里去的时候把a的值2给了别一个变量x,把b的值3给了y,
    x 与  a 并没有什么联系,
    y 与  b也 一样,所以在方法里对x与y怎么改变都不会影响到a与b
      

  3.   

    x与a 和y与b有什么关系吗,
    你构造函数里的修改了交换了x(a)y(b)的的值,但是你出来的时候并没有影响ab的值,所以ab原来是什么值还是什么值
      

  4.   

    你这样是将X,Y的值换了,与A,B没关系,改成这样就知道了class Swap{
    public Swap(int x,int y){
                      System.out.println("x="+x+" y="+y);
    int temp = x;
    x = y;
    y = temp;
                      System.out.println("x="+x+" y="+y);

    }

    public static void main(String [] args){
    int a = 2,b = 3;
    System.out.println("a="+a+" b="+b);
        new Swap(a,b);
    System.out.println("a="+a+" b="+b);    
    }
    }
      

  5.   

    其实这只是一个局部变量的问题 
        x , y的作用范围只是在构造器里头
      出了构造器的大括号就消失了
     而a , b也是  
     出了main函数也就消失了
    它们传值的时候只是把值拷贝到x , y上 
    而不是把它们本身给传过去了