永发信息网

java 引用调用问题

答案:3  悬赏:20  手机版
解决时间 2021-04-21 19:19

代买如下

放在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分 说到做到!

最佳答案

问题出在这个方法上


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();


}
}

全部回答

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不一样。

你传过去的的确是引用,不过是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()); }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
谁能打赢孙悟空 龙珠的那个哈
为什么我的QQ会员冲了12个月还是12点成长值啊
dnf公会3升4 有的有复活有的没有
急求通州市高级中学高一暑假作业答案(数学,
内功连击版的传奇SF加速?
改正错误地方
永和医药龙东店我想知道这个在什么地方
六亲不认的[六亲]是指哪6亲?
抢车位了,依旧换新,我的钱扣完了,我的车,
惠普笔记本PROBOOK4411s装了windows7 7600旗
地球上有史前文明吗?
大连哪个可以学自考本科秘书学
怎么消除访客记录手机,手机qq上如何删除自己
蒙地地址在哪,我要去那里办事
懂汽车音响的进
推荐资讯
卡丁车怎么飘移能飘的很好?我刚学。哥哥姐姐
好闹心…宝宝的小PP破了上药他就哭吃药不管用
西面来风中式快餐我想知道这个在什么地方
《侦探学园Q 》中,天草流的饰演者是?
学绘图有前途么
我老婆是这月八号月经,我们七号同房的,怎么
QQ农场怎么不能邀请好友
合肥适合专升本会计的学校
美美蛋糕我想知道这个在什么地方
如何报名中国诗词大会,中国古诗词大会2016年,
父亲节祝福话语,求最感人父亲节祝福的话
朝鲜有卫星吗,朝鲜卫星发射成功了吗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?