黑马程序员技术交流社区
标题: 函数题求解 [打印本页]
作者: hg3093483 时间: 2013-3-30 20:55
标题: 函数题求解
本帖最后由 hg3093483 于 2013-3-31 19:58 编辑
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 为什么是这样
作者: 征途 时间: 2013-3-30 21:39
因为chang()方法中的a,b.只在chang(){}这个方法区域类有效,而上主函数中的a,b只在主函数有效.就像成员变量在整个类中有效,而局部变量只在局部方法中有效.而这里的main()也是一个方法,与chang()是同级的
作者: 黑马19我最牛 时间: 2013-3-30 22:08
作用域的问题,你把public static void change(int a,int b)里面的ab换成xy,可能就好理解了,这里面的ab和和主函数打印语句的ab不是一个a,b
你的代码我没有看明白,你的change()函数里面有打印语句吗?如果有,那应该是打印两行,肯定是第一行a=5,b=9,第二行是a=4,b=5
作者: 张钶 时间: 2013-3-30 22:13
第一个很好理解,
第二个因为main函数中将a,b传了进去,a,b在全局中还是没有发生改变,输出当然还是4 ,5了
作者: 袁梦希 时间: 2013-3-30 22:31
本帖最后由 袁梦希 于 2013-3-30 22:36 编辑
其实你这问题问的挺好,这是关于值传递和引用(数组)传递的问题 我话个图给你解释一下吧
这是一个堆内存,当我们声明了a和b都在main方法中,当你调用chenge方法的时候,a和b的值的传递进入了change方法中
这时候无论在change方法中怎样操作变量,当chenge方法执行完毕,chenge方法的这个空间就会消失,所以main()如果输出了还是原来
在main方法中声明的值,这是值传递,对象传递我就不解释了,可以加我好友慢慢探讨。
作者: 蔡陶军 时间: 2013-3-30 22:51
我想楼主想要得到的结果是一样的话,则可以进行这样修改;- package com.ctj.www;
- public class Democ {
- public static void main(String[] args) {
- int a=4,b=5;
- //change(a,b);
- System.out.println(change(a,b));
- //System.out.println("a="+a+",b="+b);
- }
- public static String change(int a,int b){
- b+=a;
- a++;
- System.out.println("a="+a+",b="+b);
- return "a="+a+",b="+b;
- //System.out.println("a="+a+",b="+b);
- }
- }
复制代码
作者: 王俊杰 时间: 2013-3-30 23:03
这个问题很经典呀 当初我学习java值的传递的时候也弄不明白
说一下啊我的理解吧 希望对你有所帮助
在你的主方法中把a和b传给change(),a和b的传递实际上是个拷贝的过程,叫什么按什么传递来着,好像。。反正理解成拷贝就行了
就是说,chang()方法的参数,形式参数有它自己的内存空间 。。 跟主方法不一起的 主方法里的a和b还是原来的a和b 拷贝到change方法里的“a和b的副本”在形参内存空间里完成了改变。
在main方法里,调用完change后,就调用完了。。。。a和b还是a和b
不知道你明白了么 我说的不是很好 哈哈
作者: 王梦南 时间: 2013-3-30 23:21
楼主想要的结果是输出a=5,b=4吧?
一般而言我们都会用第三方变量来存储变量用来交换。即int temp =a;a=b;b=temp;
这个时候打印输出的a就是5,而b是4.
但是使用没有返回值的change方法就无法得到这个结果了,因为int是基础数据类型,传递进change方法的只是指值而不是引用。change方法交换后没有返回值,传入的a和b的值作用域仅仅是change方法本身,change方法执行结束,局部变量a和b的生命周期就结束了。在调用的方法中打印结果也只能是原本的a=4,b=5;
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |