黑马程序员技术交流社区
标题:
关于变量赋值的问题
[打印本页]
作者:
zhaojian
时间:
2014-5-20 15:07
标题:
关于变量赋值的问题
本帖最后由 zhaojian 于 2014-5-21 20:25 编辑
今天看到一道题:
class Chp1
{
public static void main(String[] args)
{
int a=4,b=5;
change(a,b);
System.out.println("a="+a+",b="+b);
}
public static void change(int a ,int b)
{
b+=a;
a++;
System.out.println("a="+a+",b="+b);
}
}
复制代码
打印结果是:a=5,b=9
a=4,b=5
为什么下面的a,b值没有变,在什么情况下a,b的值会变?
作者:
Lin0411
时间:
2014-5-20 15:17
参数间的传递是单向的,也就是只能有实参传递给形参,而不能由形参传递给实参。lz上面的代码中,实参传递给change函数中的形参a,b,函数体中改变的是形参的值,但此时形参的值又不能反向传递给实参,因此a,b的值并没有任何改变。lz可以将main函数中的a,b封装成Integer对象,将a,b这两个Integer对象的引用作为实参传入change函数,再根据java的自动装箱和拆箱的功能就可以改变a,b的值了。
void change(Integer a, Integer b)
{
b+=a;
a++;
}
作者:
雨落千木的时节
时间:
2014-5-20 15:52
这个问题有点简单,你要注意形参和实参的区别,调用函数时,只能由实参传递给形参,传递的是地址
作者:
zhaojian
时间:
2014-5-20 15:59
Lin0411 发表于 2014-5-20 15:17
参数间的传递是单向的,也就是只能有实参传递给形参,而不能由形参传递给实参。lz上面的代码中,实参传递给 ...
谢谢, 貌似有点懂了,再研究研究!
作者:
927233671
时间:
2014-5-20 16:37
差点我也晕了
作者:
amao
时间:
2014-5-21 00:44
这个是因为变量的作用范围引起的。
你那个方法中的a,b属于局部变量,只在change()方法内有效。
在主函数中,打印语句访问的是定义的a=4,b=5.
作者:
lindegen
时间:
2014-5-21 09:01
如果change方法后面return回了变量a 和b 呢,那么主函数打印出来的是不是就会变了
作者:
张志民
时间:
2014-5-21 10:55
我也没有想明白这个问题
作者:
艮昕辶
时间:
2014-5-21 14:35
main()方法在调用chang(a,b)方法的过程:
{
int a=a;
int b=b;
int temp=a;
a=b;
b=temp;
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2