A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 金兴 中级黑马   /  2012-4-9 22:37  /  1895 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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.求解

7 个回复

倒序浏览
这个是老问题了   public static void change(int x)里面的x是个局部变量 你把你的x传进去了之后只是改变了 局部变量的值  局部变量等方法结束后就是释放了,而你的x=5的值当然不变。。。。你要知道这个两个不同变量,而你用的是值传递,而非引用传递  是不能改变值的。。。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
方法参数传递有两种方式:
      1.值调用     本题用的是值调用,方法得到的是所有参数值的一个拷贝,特别是,方法不能修改传递给它的任何参数变量的内容,因此输出的是5,而change方法调用的是int x的参数值的一个拷贝,并不影响他在主函数的int x 值,change方法里面的x=3;
      2.引用调用     表示方法接受的是调用者提供的变量地址.
回复 使用道具 举报
基本类型的参数传递时值传递,你调用 change(x);时,把int x = 5的值复制一份,传给被调用的方法。被调用的方法接收该值后,不管如何操作都不影响主函数的x。如果是对象类型,传递的是对象地址,被调用方法则可以根据传过去的地址操作对象的内容。
回复 使用道具 举报
这是参数传值的问题,当调用change(x);
静态方法中的x会变成5,主函数中的x不会有变化
回复 使用道具 举报
路过……
回复 使用道具 举报
楼主你要学习下,值传递和引用传递。如果这个代码在C#中 把参数(int x) 改成(ref x);就能得到你想要的结果.java 现在还不支持由值传递强转为引用传递。
回复 使用道具 举报
陈坚 中级黑马 2012-4-10 10:14:29
8#
楼主用的是值的传递,是将x的值在内存中copy了一份传给调用的方法,但x的地址并没有改变,还是原来的地址,所以x的值并没有改变
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马