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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wjj410830911 中级黑马   /  2013-11-13 19:21  /  1329 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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);          }
复制代码

评分

参与人数 1技术分 +1 收起 理由
FFF + 1

查看全部评分

8 个回复

倒序浏览
楼主:因为你是在方法里改变的局部变量的值 对于main方法里a,b的值 你并没有改变 如果a,b 你是声明在Test里的成员变量 那就改变了它们的值了

点评

额、、 你的意思是吧 a。b 变成成员变量 就可以了吗? 像这样? Class Text{ a = 12 ,b=23 public static void main(String[] args) { 03. int a=12,b=23; 04. ...   发表于 2013-11-13 20:11
回复 使用道具 举报
一般当参数为基本数据类型是,是不会改变原本的值的,若传递的参数为数组,类,接口引用类型就会对其值有直接影响。
这里你可以直接将函数里形式参数用其他的名字代替,而不用a,b,这样可能就会对你的判断影响小一点
回复 使用道具 举报
执行change(a,b);时,change只是使用了a,b的副本,并没有在函数里改变a,b的值,改变的只是a,b副本的值,因此下面输出a,b的值的时候还是原来的值。

点评

哦 大概懂了...就是说Chage方法里的局部变量结束时就跟着Chage方法一起弹栈了 并没有影响到主函数的局部方法是把?  发表于 2013-11-13 20:13
回复 使用道具 举报
可以这么理解吧。
回复 使用道具 举报
本帖最后由 何超 于 2013-11-14 07:56 编辑

传递值的时候分两种 1值传递 2 引用传递
值传递的时候是不会改变本身对象的值的,而引用传递会改变本身的值,因为引用传递传给其他的是他们的地址
那么就是多个对象指向一个地址 其中一个改变其余的都改变
你这个题目里面是值传递 自然前后不会有影响了
回复 使用道具 举报
帖子已分类,若仍有疑惑,可重新提问
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马