永发信息网

java 引用调用问题

答案:3  悬赏:20  手机版
解决时间 2021-04-21 19:19
  • 提问者网友:自食苦果
  • 2021-04-21 06:44

代买如下

放在Only.java中的代码如下:

public class Only{
private int x1;
private int x2;
public void set1(int a){
x1 = a;
}
public void set2(int b){
x2 = b;
}
public int get1(){
return x1;
}
public int get2(){
return x2;
}
}

放在TestSwap.java中的代码如下


public class TestSwap{
public void Swap(Only a,Only b){
Only temp;
temp = a;
a = b;
b = temp;
}
public void show(){
Only a = new Only();
Only b = new Only();
a.set1(100);
b.set2(200);
System.out.println("调用Swap()函数之前");

System.out.println("x1 = "+a.get1()+"'"+"x2 = "+b.get2());

System.out.println("调用Swap()函数之后");
Swap(a,b);
System.out.println("x1 = "+a.get1()+"'"+"x2 = "+b.get2());
}

public static void main(String [] args){
TestSwap B = new TestSwap();
B.show();

}
}

运行 输出结果是一样的
为什么我用引用调用 怎么值不变了呢 怎么和c++里面的不一样呢?

请java高手给我详细的解释哈

给我解释清楚了 我给你20分 说到做到!

最佳答案
  • 五星知识达人网友:渊鱼
  • 2021-04-21 07:30

问题出在这个方法上


public void Swap(Only a,Only b){
Only temp;
temp = a;
a = b;
b = temp;
}


你是想实现引用的交换,但是这个交换的只是局部变量的引用。方法执行完了,这两个引用都会消失,而且你测试方法不应该设置不同的实例变量。你看看我给你修改的实例,然后你测试下


public class Only{
private int x;
public void set(int a){
x = a;
}


public int get(){
return x;
}


}




public class TestSwap{
Only a = new Only();
Only b = new Only();
public void Swap(){
Only temp;
temp = a;
a = b;
b = temp;
}
public void show(){
a.set(100);
b.set(200);
System.out.println("调用Swap()函数之前");
System.out.println("x1 = "+a.get()+"'"+"x2 = "+b.get());
System.out.println("调用Swap()函数之后");
Swap();
System.out.println("x1 = "+a.get()+"'"+"x2 = "+b.get());
}


public static void main(String [] args){
TestSwap B = new TestSwap();
B.show();


}
}

全部回答
  • 1楼网友:酒醒三更
  • 2021-04-21 08:37

public class Obje {

public void test(){ System.out.println(123456); } public void setNull(Obje o){ o=null; } public static void main(String []args){ Obje o = new Obje(); o.setNull(o); o.test(); } }

输出123456 //并没有出现空指针异常,说明o.setNull(o);并没有把 o 对象设为null,证明是值传递。

或许这个例子更能说明问题,java里面只有值传递。。确实和c不一样。

  • 2楼网友:过活
  • 2021-04-21 07:52
你传过去的的确是引用,不过是Swap函数里的引用,也就是说Swap里的Only a和Only b虽然的确引用了实际new出来的a和b,不过它们自己只是Swap函数里的局部变量,你在Swap里交换a和b,是影响不到show里的a和b的 对应c的代码: vodi swap( int* a, int* b ) // 传过来的是一份原变量地址的拷贝 { int* p; p = a; a = b; b = t; // 只改变了拷贝 } int a = 3, b = 4; swap( &a, &b ); 你可以: public void Swap(){ Only temp; temp = a; a = b; b = temp; } Only a, b; public void show(){ a = new Only(); b = new Only(); a.set1(100); b.set2(200); System.out.println("调用Swap()函数之前"); System.out.println("x1 = "+a.get1()+"'"+"x2 = "+b.get2()); System.out.println("调用Swap()函数之后"); Swap(); System.out.println("x1 = "+a.get2()+"'"+"x2 = "+b.get1()); }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯