黑马程序员技术交流社区
标题:
求解关于参数传递的问题?
[打印本页]
作者:
金兴
时间:
2012-4-9 22:37
标题:
求解关于参数传递的问题?
class PassValue{
public static void main(String args[])
{
int x = 5;
change(x);
System.out.println(x);
}
public static void change(int x)
{
x = 3 ;
}
}
复制代码
为什么 change方法没有被调用呢? 打印的结果还是5.求解
作者:
程旦
时间:
2012-4-9 22:48
这个是老问题了 public static void change(int x)里面的x是个局部变量 你把你的x传进去了之后只是改变了 局部变量的值 局部变量等方法结束后就是释放了,而你的x=5的值当然不变。。。。你要知道这个两个不同变量,而你用的是值传递,而非引用传递 是不能改变值的。。。
作者:
未长法
时间:
2012-4-9 22:58
方法参数传递有两种方式:
1.值调用 本题用的是值调用,方法得到的是所有参数值的一个拷贝,特别是,方法不能修改传递给它的任何参数变量的内容,因此输出的是5,而change方法调用的是int x的参数值的一个拷贝,并不影响他在主函数的int x 值,change方法里面的x=3;
2.引用调用 表示方法接受的是调用者提供的变量地址.
作者:
曾晓文
时间:
2012-4-9 23:03
基本类型的参数传递时值传递,你调用 change(x);时,把int x = 5的值复制一份,传给被调用的方法。被调用的方法接收该值后,不管如何操作都不影响主函数的x。如果是对象类型,传递的是对象地址,被调用方法则可以根据传过去的地址操作对象的内容。
作者:
黑马-刘昌文
时间:
2012-4-9 23:06
这是参数传值的问题,当调用change(x);
静态方法中的x会变成5,主函数中的x不会有变化
作者:
戴振良
时间:
2012-4-9 23:30
路过……
作者:
姜志钦
时间:
2012-4-10 09:25
楼主你要学习下,值传递和引用传递。如果这个代码在C#中 把参数(int x) 改成(ref x);就能得到你想要的结果.java 现在还不支持由值传递强转为引用传递。
作者:
陈坚
时间:
2012-4-10 10:14
楼主用的是值的传递,是将x的值在内存中copy了一份传给调用的方法,但x的地址并没有改变,还是原来的地址,所以x的值并没有改变
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2