黑马程序员技术交流社区

标题: 求解关于参数传递的问题? [打印本页]

作者: 金兴    时间: 2012-4-9 22:37
标题: 求解关于参数传递的问题?
  1. class PassValue{

  2.    public static void main(String args[])
  3.     {
  4.         int x = 5;
  5.         change(x);
  6.         System.out.println(x);
  7.     }
  8.     public static void change(int x)
  9.     {
  10.        x = 3 ;
  11.     }
  12. }
复制代码
为什么 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