不明白这个输出结果,请教各位

zheyvsu 2003-12-28 12:21:15
请教了
public class Card {
int x;
static private void swap(Card c1, Card c2)
{
Card temp = c1; c1 = c2; c2 = temp;
}


public static void main(String[] args) {

Card c1 = new Card(); c1.x = 5;
Card c2 = new Card(); c2.x = 6;
swap(c1, c2);
//c1=c2,用这个语句,输出的是66
System.out.println(c1.x + "" + c2.x);
}

}
我得理解是,如果把引用看成是"标签"的话,那么swap不是让这两个标签互换着贴
上对方的对象,所以应该输出65呀?可是输出的是56.
请问怎么回事?3q
...全文
38 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zkjbeyond 2003-12-28
  • 打赏
  • 举报
回复
Card c1 = new Card(); c1.x 为对象c1的成员变量 要修改他只能 c1.x=?;

Leemaasn 2003-12-28
  • 打赏
  • 举报
回复
你这是传值方式,当然56了。



将“流氓无赖”测试到底。。。
——始于2003年7月


树欲止而风不停,行云流水匆匆去;
树梢蚂蚱凭空望,江边浪花碎巨石;



支持“流金岁月”!!!
——2003年12月24日am

^@^
wxh512 2003-12-28
  • 打赏
  • 举报
回复
输出的是正确的
因为你的方法虽能用标签但你方法得到的值
不是c1.x和c2.x
eshow 2003-12-28
  • 打赏
  • 举报
回复
看下面这段代码你就会明白了:

public class MethodArgTest {

//int x;
static private void swap(int c1, int c2)
{
//Card c1 = new Card(); c1.x = 5;
//Card c2 = new Card(); c2.x = 6;
int temp = c1; c1 = c2; c2 = temp;
System.out.println(c1 + "" + c2);
}


public static void main(String[] args) {

int c1 =5;
int c2 =6;

swap(c1, c2);
//c1=c2,用这个语句,输出的是66
//Card temp = c1; c1 =c2; c2 = temp;
//swap();
System.out.println(c1 + "" + c2);
}

}

这个例子说明java中包括Primitive在内所有的传参都只是传的Referrence,而不是Object本身。
Geniusth 2003-12-28
  • 打赏
  • 举报
回复
执行swap后c1和c2引用同另一个对象,所以值是相同的。:)
binny 2003-12-28
  • 打赏
  • 举报
回复
关于传参的问题

这是我在另外一个帖子里面写的,拷贝过来占点篇幅:

对于基本类型没问题,传值;

对象传引用,这个引用是什么呢?也就是一个地址的数值。

所以有人认为,java就是传值。

这其实就是个概念问题,什么叫值,什么叫址。没有值,址用什么来体现。

这个争论已经有很多年了,我认为,理解了就行了,不用去争论这些没有意义的东西。

eshow 2003-12-28
  • 打赏
  • 举报
回复
如果不用swap()这个方法,而直接用
Card temp = c1; c1 =c2; c2 = temp;

结果就是65。
zheyvsu 2003-12-28
  • 打赏
  • 举报
回复
传递参数呀

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧