请逐句解释一下这个JAVA程序,谢谢.并告诉我为什么没有交换值呀?

来源:百度知道 编辑:UC知道 时间:2024/06/18 07:50:58
class PassVal{
static void exchange(int a, int b){
int temp;

temp = a;
a = b;
b = temp;

}
public static void main(String[] args){
int i = 10,j = 100;

System.out.println("before call: " + "i=" + i + "\t" + "j = " + j);

exchange(i, j);

System.out.println(&

你的程序没有错,但是确实改变不了i和j的值,原因理解起来稍复杂,我大概的给你说一下:
传值的方式可以分为两种,一种是传基本变量,就像你传两个int类型的变量这种方式。另一种叫传引用,或者叫传对象(真正的叫法是传对象的副本)。第一种方式中每个变量在内存中的位置不一样,它们互相之间没有关系,所以无法改变你想变化东西。而第二种方式中你传过去的引用和要处理它的对象会指向同一个内存位置,这样就会改变你想变化的东西。这里不容易理解,基础学好了就知道了。
这里给你一个传引用的小例子,完成的内容和你要做的一样,但是能改内容,你研究一下吧:
class test{
public static void main(String[] args){
foo oo=new foo();
oo.i=1;
oo.j=5;
System.out.println("交换前:"+"i="+oo.i+",j="+oo.j);
new ex().exchange(oo);
System.out.println("交换后:"+"i="+oo.i+",j="+oo.j);
}
}

class foo{
int i;
int j;
}

class exchange{
public void exv(foo f){
int temp=f.i;
f.i=f.j;
f.j=temp;
}
}

值没有改变吧。

你把I,J传进去,然后把A,B调换了.那跟I,J有什么关系.I还是原来的I,J还是原来的J

引用传递和值传递~!~~!!!!!!!!!!!!