黑马程序员技术交流社区

标题: 新手请问一下下图片中a,b,值为什么不变 [打印本页]

作者: 无霜子    时间: 2015-5-5 12:37
标题: 新手请问一下下图片中a,b,值为什么不变
a,b,值为什么不变

8cf6fc246b600c3377408f8c1f4c510fd8f9a1cb.jpg (95.94 KB, 下载次数: 55)

8cf6fc246b600c3377408f8c1f4c510fd8f9a1cb.jpg

作者: CoeusLYJ    时间: 2015-5-5 12:42
因为没有临时变量。。。。修改代码:int temp=0; temp=a; a=b;b=temp;
作者: 1017161726    时间: 2015-5-5 13:05
CoeusLYJ 发表于 2015-5-5 12:42
因为没有临时变量。。。。修改代码:int temp=0; temp=a; a=b;b=temp;

这个不是这个问题。
题目中的意思就是没有临时变量的情况。
如果不用临时变量,直接这样算,
int a=2,b=5;
b=a;
a=b;
这样算,结果应该是a=2,b=2;

题目中的意思应该这么理解:
swap(a,b)计算后的结果是0.
但是a和b 已经定义好了,只是作为参数传递给了swap方法,方法中的运算不会改变a和b原来的值。
所以a仍然是2,b仍然是5.swap方法返回的结果是0.

这题主要看清楚a和b是属于哪一块的。
     


作者: CoeusLYJ    时间: 2015-5-5 13:12
swap()方法有它的方法体,变量只在它的作用域中有效,出了作用域就无效了。在此题中,swap(2,5),2,5是作为传递参数传入swap方法中,一旦swap方法结束,swap就会弹栈,那么自然而然变量swap中的2,5也就消失了,但这不意味着int a=2,b=5会消失 ,它要消失的话,要等到main方法结束后才会消失 。
作者: zuoyou    时间: 2015-5-5 13:29
是关于变量作用域的问题。
作者: jinlong0999    时间: 2015-5-5 13:37
:handshake学习了
作者: 陈国安    时间: 2015-5-5 19:20
int是值传的,就是拷贝了一个int a ,int b到函数中,并没有改变原来的a b 值
作者: 无霜子    时间: 2015-5-5 21:33
1017161726 发表于 2015-5-5 13:05
这个不是这个问题。
题目中的意思就是没有临时变量的情况。
如果不用临时变量,直接这样算,

学习了。谢谢
作者: 无霜子    时间: 2015-5-5 21:34
CoeusLYJ 发表于 2015-5-5 13:12
swap()方法有它的方法体,变量只在它的作用域中有效,出了作用域就无效了。在此题中,swap(2,5),2,5是作为 ...

谢谢您的回复,懂了。。
作者: IDhmpj    时间: 2015-5-5 21:57
因为这道题有两个a和两个b。main方法中有一个a = 2,一个b= 5,还有一个c = 0;swap方法中也有一个a =2,b=5;swap()执行完成后,c = 0;然后取出mian方法中的a和b。这时候swap中的a,b已经不存在了。
作者: yuanhnu    时间: 2015-5-5 22:06
涉及到值传递问题,基本类型的值传递不影响原来a,b的值,引用类型会影响
作者: 代码搬运1号    时间: 2015-5-5 22:45
赞一个!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2