黑马程序员技术交流社区

标题: 有关函数 [打印本页]

作者: wjj410830911    时间: 2013-11-13 19:21
标题: 有关函数
  1. class Test {
  2.         public static void main(String[] args) {
  3.                 int a=12,b=23;
  4.                 System.out.println("a="+a+",b="+b);//这里应该是a= 12 b=23
  5.                 change(a,b);
  6.                 System.out.println("a="+a+",b="+b);//为什么第4次输出的不是 a=35 b=10呢?而是a=12 b=23                                   //之前已经调用了  change(a,b)方法了啊  值不是已经改变了吗?
  7.         }

  8.         public static void change(int a,int b){
  9.                 System.out.println("a="+a+",b="+b);
  10.                 a = a + b;
  11.                 b = 10;
  12.                 System.out.println("a="+a+",b="+b);          }
复制代码

作者: 敗唫①輩ふ    时间: 2013-11-13 19:29
楼主:因为你是在方法里改变的局部变量的值 对于main方法里a,b的值 你并没有改变 如果a,b 你是声明在Test里的成员变量 那就改变了它们的值了
作者: 习嘻嘻    时间: 2013-11-13 19:56
一般当参数为基本数据类型是,是不会改变原本的值的,若传递的参数为数组,类,接口引用类型就会对其值有直接影响。
这里你可以直接将函数里形式参数用其他的名字代替,而不用a,b,这样可能就会对你的判断影响小一点
作者: 付凯鹏    时间: 2013-11-13 20:03
执行change(a,b);时,change只是使用了a,b的副本,并没有在函数里改变a,b的值,改变的只是a,b副本的值,因此下面输出a,b的值的时候还是原来的值。
作者: 付凯鹏    时间: 2013-11-13 21:56
可以这么理解吧。
作者: 何超    时间: 2013-11-14 07:53
本帖最后由 何超 于 2013-11-14 07:56 编辑

传递值的时候分两种 1值传递 2 引用传递
值传递的时候是不会改变本身对象的值的,而引用传递会改变本身的值,因为引用传递传给其他的是他们的地址
那么就是多个对象指向一个地址 其中一个改变其余的都改变
你这个题目里面是值传递 自然前后不会有影响了
作者: 黄炳期    时间: 2013-11-14 09:14
帖子已分类,若仍有疑惑,可重新提问




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2