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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© taoge 中级黑马   /  2013-12-22 18:43  /  860 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class Example
  2. {
  3.         String str = new String("good");
  4.         char[] ch = { 'a', 'b', 'c' };

  5.         public static void main(String args[])
  6.         {
  7.                 Example ex = new Example();
  8.                 ex.change(ex.str, ex.ch);
  9.                 System.out.print(ex.str + " and ");
  10.                 System.out.println(ex.ch);
  11.         }

  12.         public void change(String str, char ch[])
  13.         {
  14.                 str = "test ok";
  15.                 ch[0] = 'g';
  16.         }
  17. }
复制代码
为什么输出是good and gbc呢?change方法为什么只改变了ch的值?

评分

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

查看全部评分

2 个回复

倒序浏览
准确的说  change方法只改变了ch零角标位的值,,代码中改变的str值改变的只是change方法中局部变量str的值,正确的做法是在change方法的str前面加上this,代表使用这个方法的对象引用,比如这样,输出就成了test ok and gbc
  1. public class Example
  2. {
  3.         String str = new String("good");
  4.         char[] ch = { 'a', 'b', 'c' };

  5.         public static void main(String args[])
  6.         {
  7.                 Example ex = new Example();
  8.                 ex.change(ex.str, ex.ch);
  9.                 System.out.print(ex.str + " and ");
  10.                 System.out.println(ex.ch);
  11.         }

  12.         public void change(String str, char ch[])
  13.         {
  14.                 this.str = "test ok";
  15.                 ch[0] = 'g';
  16.         }
  17. }
复制代码

评分

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

查看全部评分

回复 使用道具 举报
这个是参数传递过程中的问题。
ex.str是将str的值赋给了change函数中的字符串str。
    所以change操作修改的只是内存中新建的属于change函数的str的值,
    在函数操作完成退出时这个临时建立的变量str是会自动释放的,并没有保存为ex.str的值。


ex.ch是将字符数组的引用传给了change函数中的字符数组ch。
    传引用和传值的区别就在这儿了。
    如果把ch的引用传递个change中的ch。那么两个ch指向的是同一个字符数组,也就是main函数中创建的ch数组。
    所以change操作修改的内存区域是main中ch的内存区域,所以change操作完成退出时,main中ch的值被修改了。


如果还不理解建议看一下C++中参数传递过程中传值和传引用的区别,java中对这个的介绍不是很清楚。

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马