当前位置: 代码迷 >> J2SE >> 求解这段代码含义?该怎么解决
  详细解决方案

求解这段代码含义?该怎么解决

热度:43   发布时间:2016-04-24 15:56:43.0
求解这段代码含义??
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   了
为什么没变化?


------解决方案--------------------
这个问题是初学者经常碰到的。

首先,你要记住,Java的参数传递全都是值传递。有的书上说基本类型是值传递,而对象是引用传递,但引用本身传递的也是值,引用的值可以看成是对象的地址。

所以,函数里面的变量值不认如何改变,不会影响到函数外的变量,所以两次输出是一样的。

如果传递的是引用,比如

f(Object o),相当于把函数外一个对象的引用传递给了函数里面,也就是说,函数里面也可以访问函数外创建的对象,这样可以更改这个对象的状态。
------解决方案--------------------
因为它们都是基本类型,按值传递了。
传到里去的时候把a的值2给了别一个变量x,把b的值3给了y,


x 与 a 并没有什么联系,
y 与 b也 一样,所以在方法里对x与y怎么改变都不会影响到a与b
------解决方案--------------------
你这样是将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);
}
}
  相关解决方案